Python pour Paradox


PONX 1.04 'post-Noël'
Avec quelques modifications mineures par rapport à la 1.03.

 Installation

 Explications générales


PONX est simplement un petit serveur COM, auquel on transmet des requêtes, depuis Paradox, par utilisation d'une chaine de caractères. Le résultat revient par une autre chaîne de caractères (avec possibilité d'utiliser un fichier ascii). On a, dès lors la possibilité d'utiliser des scripts Python depuis Paradox. Et comme il existe de très nombreuses librairies Python, l'intérêt pour Paradox devient énorme (programmation Web, manipulations d'images, scripting système, etc.)
Enfin, j'ai intégré un certain nombre de fonctions dans PONX, ce qui facilite le développement de nouveau scripts, voire permet une utilisation immédiate, sans réelle programmation. Regardez les exemples, c'est assez parlant.

J'ai choisi OLE-automation (serveur COM), plutôt que le pilotage par DLL, suite à une discussion avec Jacques Chaillot, qui pense que l'évolution d'une DLL n'est pas stable (dans le temps) pour la définition de ses appels (son API).

 Modifications de la version 1.04
  • Ajout d'une fonction COM : PVersion( ), qui retourne la version installée de PONX.
  • Ajout, à la librairie intégrée, de la ffonction htdecode(string)
  • complément "Noël" : ajout d'un traitement expérimental, mais fonctionnel, du multi-threading.
  • complément "post-Noël" : extraction de chaînes avec des expressions régulières ; évolution du multi-threading ; ajout d'une fonction de passage de paramètre d'une chaîne "Brute".
 Modifications de la version 1.03

Résumé :

  • PONX travaille maintenant avec Python 2.3. L'installation peut donc être à revoir.
  • Simplification de l'ouverture. Plus besoin d'initialisation. Plus besoin, non plus de quitter (un close suffit).
  • Modification de quelques fonctions : les remplacements supportent maintenant des listes de remplacements, en une seule opération ;
  • Ajoute de plusieurs nouvelles fonctions intégrées :
    • persistance locale
    • persistance distante (grâce au serveur de persistance TCP/IP)
    • gestion du presse-papier (modes texte, RTF, & "Borland Form Object" seulement)
  • Il y a maintenant 3 fonctions d'appel de PONX : PRun, PRun1 & PRun2 (avec respectivement 1, 2 ou 3 paramètres)
  • On peut maintenant appeller PONX et passant des paramètres de type "Memo"
  • Du fait du passage à Python 2.3, le problème de l'encoding est devenu crucial. En effet, Paradox travaille en ANSI, et, lorsque Windows envoie des paramètres à un serveur COM, il les codes en unicode, via le cp1252 (pour la France). Il m'a fallut tenir compte de cela. Maintenant, PONX gère donc le décodage des paramètres COM selon le shéma fourni par la fonction POSIX setlocale(LC_ALL,""), qui est supportée par Windows. Cependant, je n'ai pas pu vérifier pour les postes non-europe de-l-ouest.
  • Mots de passe & paramètres : plutôt que des les gérer dans le code des fiches, j'ai préféré les mettre dans un fichier-texte PASRAM.TXT ; ce fichier peut-être modifié par un éditeur de textes, ou par la fiche PasRam.fsl. Attention ! Ce fichier est remplacé à chaque nouvelle installation, donc sauvegardez-le avant chaque installation.

 Utilisation des exemples

Tous les exemples ont été regroupés en quelques fiches. Sur les deux fiches principales.De plus, sur ces fiches, chaque bouton est devenu autonome. Cela procure les avantages suivants :

  • Il suffit de copier-coller le bouton, pour ajouter la fonctionnalité à une autre fiche. Cela facilite le développement.
  • La compréhension / analyse est plus facile. Tout le code est dans le bouton. Pas d'appel à une librairie, pas de variables globales ou déclarées ailleurs. Tout le code nécessaire à une fonction est disponible dans le bouton.
  • Il est plus facile de modifier/adapter une fonction isolée. L'orientation objet est ainsi plus prononcée. Il est alors souvent possible d'utiliser la délégation pour appeler une fonction à partir d'un autre objet. Mais n'ayant pas complètement testé, je vous invite à vérifier plus complètement. Des tests unitaires doivent suffire.

    Un inconvénient, toutefois : en cas d'évolution du code, il faut aller modifier tous les boutons (par d'héritage).

    Pour voir le code d'usage de chaque bouton, il faut se positionner à partir du PushButton, en bas du code.

 Explications sur les exemples et l'utilisation de PONX


Test (string)
. Tout petit code, qui envoie une chîne de caractères, et la récupère en retour de PONX. Cela permet de tester l'installation de PONX;

Test (Memo). Ce code montre la possibilité d'utiliser des variables Memo pour envoyer/recevoir des valeurs/paramètres. Mais n'oubliez pas les contraintes d'utilisation des Memo...

Enrobage de commandes DOS. Une liste de commandes est exécutée, et on récupère, en sortie, les messages envoyés sur StdIn. Cela permet d'avoir un retour d'information, et donc de mieux maîtriser ce qui s'est passé.

Remplacement de texte dans un string. Une simple fonction qui remplace, dans une chaîne de caractères toutes les occurences d'une sous-chaine par une autre. Certes, il est possible de faire une méthode en Object-Pal, mais cette fonction montre comment utiliser PONX, et peut être également être utilisée dans un autre script PONX. Il y a 2 exemples d'utilisation dans le code. Nouveau depuis la version 1.02 : on indique une liste de tuples (valeur-à-remplacer / valeur-de-remplacement)

Remplacement de texte dans un fichier texte. Comme précédemment, mais travaille sur un fichier Ascii (texte), et fourni un autre fichier en résutat. Cela peut servir, par exemple, à "Wrapper" des pages HTML pour un site. Il y a 3 exemples d'utilisation dans le code, dont le second a la particularité d'utiliser un script PONX provenant d'un fichier texte (Tst2ponx). Nouveau depuis la version 1.02 : on indique une liste de tuples (valeur-à-remplacer / valeur-de-remplacement)

FTP : envoi de fichiers. L'exemple a été modifié ; maintenant, il est décomposé en plusieurs étapes :

    • Ouverture d'une connexion FTP
    • Envoi (upload) de fichiers
    • Fermeture de la connexion

A noter que l'on reprend la main entre chaque étape, ce qui permet de voir comment utiliser PONX en plusieurs fois (ici avec persistence de la connexion FTP).
Noubliez pas de configurer l'adresse du serveur hôte ("Host"), le directory distant ("Path"), le nom d'utilisateur, le mot de passe, le directory de lecture des fichiers ("PathLocal"), et le nom des fichiers.

Entre cet exemple et le précédent, vous avez ce qu'il faut pour automatiser la mise en ligne (mise à jour) d'un site Web statique.

FTP : lecture de fichiers. L'exemple a été modifié ; maintenant, il est décomposé en plusieurs étapes :

    • Ouverture d'une connexion FTP
    • Lecture (download) de fichiers
    • Fermeture de la connexion

Ici aussi, on reprend la main entre chaque étape.
Noubliez pas de configurer l'adresse du serveur hôte ("Host"), le directory distant ("Path"), le nom d'utilisateur, le mot de passe, le directory de réception des fichiers ("PathLocal"), et le nom des fichiers.

NEWS : lecture liste de groupes. On lit la liste des Newsgroups du serveur PNews.

NEWS : lecture d'articles. On lit 10 articles sur "zoo-logique.org/programmation.Paradox". Le résultat est enregistré dans le directory "C:\PonxNews", et dans un sous-répertoire ayant le nom du groupe.

MAIL (POP) : lecture d'en-têtes d'e-mails. Cet exemple permet de récupérer l'en-tête des messages en attente sur une adresse e-mail. Modification, par rapport à la version précédente : utilisation de la commande pop "RETR" au lieu de TOP. Cela est beaucoup plus rapide (lecture de l'en-tête seul). J'ai également supprimé la mise en table du résultat, pour simplifier l'installation de l'exemple.

N'oubliez pas de configuer le serveur POP, le nom d'utilisateur, et le mot de passe.

Perso, j'utilise cette fonction, lorsque, en déplacement, je veux savoir comment par GPRS quels courrier j'ai en attente.

Nouveau depuis la version 1.03 : la fonction ramène l'info de pièce jointe (Multipart ou Monopart).

WEB : lecture d'une page. Ici, on lit une page Web, et on affiche le code-source. N'oubliez pas de configurer l' Url de la page à récupérer.
Attention : certaines pages sont contenues dans un cadre (frame) ; dans ce cas, on ne lit que le code du Frame. Il est important de bien vérifier l' Url utilisée.

Vous pouvez utiliser cette fonction pour récupérer, sur Internet, beaucoup d'informations (taux de change, heure, indices, etc. etc.)

Pseudo quasi-Web-service. Super exemple. On télécharge une fiche Paradox sur un site Internet, et on la lance. De plus, pour accélérer les choses, on utlise la compression ZIP.

Ainsi l'exemple utilise une fiche "PonxDemo.fsl", compressée dans un fichier zip. Ce fichier est téléchargé, puis décompressé, PONX rend alors la main à Paradox, en retournant le nom de la fiche récupérée. Paradox n'a plus qu'à l'appeler. La fiche-exemple utilisée ici permet d'effectuer un arrondi sur un champ quelconque d'une table quelconque.

Vous voyer le genre de possibilités : utilisation de fiches très spécialisées, location d'utilisation de fiches, etc. etc. On obtient des possibilités similaires aux fameux web-services, dont tout le monde parle.

Dernier point : la décompression du fichier compressé en ZIP n'utilise pas de logiciel externe. La décompression est incluse dans PONX.

Manipulation de fichiers ZIP. Dans cet exemple, on se limité au test de fichiers ZIP. PONX retourne l'information sur l'intégrité du fichier : 'OK' ou 'Problème'. N'oubliez pas de configurer le nom du ou des fichiers ZIP à tester.

Il est aussi possible, avec PONX, d'utiliser un programme externe (comme PKZIP, WINZIP, etc.), par l'enrobage de commandes DOS. Cela était fait dans l'exemple de la version Beta de PONX.

Il y a possibilité, avec PONX, de compresser (créer) et de lire (décompresser) des fichiers ZIP. Mais je n'ai pas eu le temps de fignoler l'exmple. Mais c'est pour bientôt.

WORD : démo de pilotage. il s'agit juste de montrer la possibilité de pilotage de Word par Paradox via PONX. On crée un document, on y écrit une phrase, et on sauvegarde sous C:\\Ponx.doc. Pour l'instant, c'est plus facile d'utiliser la librairie "Word pour Paradox" que vous trouverez sur mon site, mais cela risque d'évoluer.

Vous noterez que l'on utilise ici COM dans COM (si vous préférez, COM dans Ole-automation).

Autre intérêt de cet exemple : le script PONX est entièrement dans le code du bouton Paradox. On n'utilise aucune fonction pré-définie de PONX. Cela peut aider à montrer comment construire ses propres scripts PONX.

NEWS : écriture d'un article en texte brut. Il s'agit d'un exemple simple, en mode "Plain/Text". La cibles est "zoo-logique.org/test".

NEWS : écriture d'un article en Html.. Il s'agit d'un exemple complet, avec HTML, pièces jointes, et NOUVEAU gestion des pièves intégrées (textures de fond, musique, images insérées, objets accessicles par des scripts.

WEB : téléchargement d'un fichier. Ici, on demande l'adresse Internet d'un fichier (son URL). Le fichier est alors téléchargé (download), et enregistré sur disque.

Je m'en sers régulièrement, par exemple pour récupérer une animation flash, dont j'ai extrait l'adresse du code-source d'une page web.

 Suite des exemples (fiche BigSample2.fsl)


Analyse CSV d'un fichier
. Supposons que vous deviez importer un fichier CSV (Comma Separate Values = Fichier ASCII, avec valeurs séparées par des virgules) . Ce programme lit et analyse le fichier, et indique le nombre de champs, le caractère de séparation, le caractère encadrant les chaînes de caractères (string), le nombre de lignes.
Au niveau PONX, cet exemple montre l'utilisation d'un script de fonctions Python, non chargé dans Paradox (utilisation de l'instruction Python "import"). Cela est similaire, au niveau de PONX, au fonctionnement des librairies de Paradox.
Pour faire fonctionner l'exemple, il faut que le fichier mDSVmci.pyc (ou mDSVmci.py) soit dans le répertoire de travail (:WORK:). Par défaut, l'exemple analyse le fichier C:\Abc.txt (mais vous pouvez changer cela). Ces fichiers sont fournis dans PONX 1.01

Version de windows. Tout bêtemet une fonction qui retourne une chaîne décrivant la version de windows. Il s'agit d'un petit exemple d'encapsulation de la commande système VER.

Traitements sur une image. A partir d'un fichier image (ici "C:\zVelo.jpg"), PONX peut appliquer différents traitements : rotation, redimensionnement, 'Flip', conversion de format). Le résultat est mis dans un (autre) fichier image.
Nouveau, depuis la version 1.03 : fonction CROP, pour extraire une partie d'une image.

Envoi d'e-mail. Comment envoyer des e-mails ? Paradox le permet en standard, mais en utilisant MAPI (Outlook-Express), en mode texte. J'avais proposé une autre solution, avec un objet COM/Active-X. Mais, ici, c'est mieux.

Ici PONX permet d'envoyer directement des e-mails, sans outils externes. L'exemple envoie un e-mail en HTML, avec 2 pièces jointes. vous noterez également qu'il est possible d'envoyer à plusieurs destinataires simultanément, de mettre de nombreuses pièces jointes, etc.

Toutefois le support du HTML est partiel : impossible, pour l'instant, d'intégrer les pièces jointes dans le corps du message. Les scripts sont possibles, mais limités, du fait de l'impossibilité d'utiliser des objets. Mais ça viendra (liste "à faire").

Version 1.02 :
il y a une fiche exemple pour la persistence.

Version 1.03 : il y a des fiches exemples pour :
   - le screenshot (capture d'écran)
   - le traitement d'image.
   - la télé-persistence (le serveur de télé-persistence TCPersistServer.py est fourni avec PONX).

Version 1.04 : il y a des fiches exemples pour :
   - le multi-threading
   - l'extraction avec expressions régulières.