Page 1 sur 1

[Tous] Gérer les scripts en Python

Publié : 09 nov. 2016 16:49
par Hubert Lambert
 
 Ajout : APSO est maintenant disponible sur le site extensions.libreoffice.org à la page  
  https://extensions.libreoffice.org/extensions/apso-alternative-script-organizer-for-python   
Bonjour à tous,

[Pour faire suite à ce fil, et en particulier à la suggestion de Dude, je déplace ici une partie du message original.]

Hanya, l'un des contributeurs les plus éclairés et efficaces de la sections "Macros et API" du forum anglophone, a proposé en 2012 un script (alternative python script organizer) qui simplifie énormément la gestion des scripts python sous OpenOffice ou LibreOffice. Ce script mérite me semble-t-il une bien meilleure visibilité.

Pour en faciliter l'usage, je l'ai adapté comme suit :
- francisation des commandes et éléments de menus ;
- ajout de deux commandes "copier vers le document" et "exporter" depuis un document existant (le code n'est qu'une variante du code original d'Hanya) ;
- implémentation (très élémentaire) de l'option "édition", de sorte que le script puisse être modifié via l'éditeur par défaut du système ;
- empaquetage dans une extension pour en faciliter l'installation.

Une fois cette extension installée (et le programme redémarré par prudence), un nouvel élément "Gérer les scripts python" apparaîtra dans le sous-menu Macros du menu Outils :
APSO_menu.png
APSO_menu.png (11.23 Kio) Consulté 16980 fois
Ce nouvel élément ouvre une boîte de dialogue listant les scripts et proposant diverses actions :
APSO_dialogue.png
APSO_dialogue.png (17.5 Kio) Consulté 17226 fois
Le bouton Exécuter permet de lancer la macro sélectionnée.
Les actions disponible depuis le bouton Menu varient selon la sélection en cours et sont :
- créer un répertoire ou un fichier si la sélection est un conteneur ("user","share" ou "document") ;
- modifier*, renommer, supprimer un fichier ou un répertoire ;
- copier un fichier depuis l'application ("user" ou "share") dans le document courant ;
- remplacer un fichier embarqué dans un document par un fichier se trouvant sur l'ordinateur ;
- exporter un fichier embarqué dans un document.
[* L'option "Modifier" se contente d'ouvrir le fichier avec l'éditeur de texte associé par défaut à l'extension ".py". Elle ne fonctionne pas avec les scripts embarqués dans un document.]
 Ajout : L'édition directe des scripts embarqués est partiellement possible depuis la version 0.6 
Cette version 0.2, compatible avec OpenOffice et LibreOffice, intègre en outre les éléments suivants :
- internationalisation de l'extension (pour l'instant français et anglais) ;
- ajout d'un raccourci clavier par défaut (alt+maj+F11) pour un lancement rapide ;
- une mini-bibliothèque destinée à faciliter le développement, qui contient trois fonctions : xray, mri et msgbox.
Pour accéder à ces dernières depuis un script, il faut avoir lancé au moins une fois l'organiseur de scripts python (pour charger le chemin) et insérer la ligne suivante :

Code : Tout sélectionner

from apso_utils import xray, mri, msgbox
(et avoir bien sûr installé Xray ou MRI le cas échéant).

Pour toute suggestion, question ou remarque, le fil initial donné plus haut me paraît être un endroit tout indiqué :wink: .
 Ajout : version 0.3 :
- ajout de l'allemand et de l'italien ;
- correction du code. 
 Ajout : version 0.4 :
- ajout du hongrois (merci à Zizi64). 
 Ajout : version 0.5 :
- ajout d'une page d'options permettant le choix de l'éditeur (basé sur EditorKicker de Hanya) ;
- ouverture des macros à la ligne correspondante, si l'option idoine est définie ;
- adaptation du vocabulaire par cohérence avec le gestionnaire de macro par défaut (pour faire suite à ce fil) ;
- meilleure gestion des erreurs et des dialogues accentués. 
 Ajout : version 0.6 :
- prise en compte de la propriété AllowMacroExecution pour les macros embarquées ;
- sous réserve de fournir les paramètres d'édition, possibilité d'accéder directement aux erreurs de syntaxe depuis le message d'erreur ;
- édition directe des macros embarquées (uniquement dans le contexte de l'extension). 
 Ajout : version 0.7 :
- correction d'un bogue ;
- implémentation des mises à jour automatiques. 
 Ajout : version 0.8.3 :
- corrige un problème (sous Windows) lorsqu'un chemin ou un document contient des caractères non-ascii. 
 Ajout : version 0.8.7 :
- affichage des scripts installés par extension ;
- navigation dans l'arborescence via les flèches et la toucher "entrée" ;
- correction de bugs mineurs. 

Re: [Tous] Gérer les scripts en Python

Publié : 05 juin 2017 20:38
par OlivierR
Bonjour,
Attendu que chez TDF, ils veulent simplifier la vie de ceux qui utilisent le Python et encourager à utiliser ce langage, cette extension serait probablement acceptée parmi celles fournies par défaut dans LibreOffice.

Re: [Tous] Gérer les scripts en Python

Publié : 06 juin 2017 20:13
par Hubert Lambert
Bonjour Olivier,

Merci pour les encouragements.
J'avais envisagé de publier l'extension sur le site dédié, mais il m'avait semblé utile d'obtenir au moins l'aval d'hanya. Or celui-ci ne semble plus très actif. Je vais essayé de le recontacter.
Cordialement.

Re: [Tous] Gérer les scripts en Python

Publié : 26 août 2017 13:49
par Jurassic Pork
hello Hubert,
tout d'abord merci pour cette extension qui simplifie l'utilisation de macros python dans LibreOffice.
Voici ce que je te propose de rajouter à ton extension :
une classe située dans les "utilitaires" de APSO (apso_utils.py) qui permet de créer une fenêtre de debug pour une macro python. Dans cette fenêtre on affiche ce qui est demandé dans la macro à déboguer. La classe comprend :
1 - Un constructeur qui "fabrique" la fenêtre qui comprend 2 boutons, 1 composant edit en lecture seul pour l'affiche : def __init__(self,msg="script",titre="Fenêtre",width=600,height=400)
2 - Une fonction trace(message) qui permet d'afficher le contenu de la chaîne message.
3 - Une fonction print(self,*objects, sep=None, end=None) qui reprend ce que fait print mais en l'affichant dans la fenêtre de debug.
4 - une fonction close() qui permet de fermer cette fenêtre.
Plutôt qu'un long discours je vais montrer ce que cela donne pour cette macro en python :

Code : Tout sélectionner

#!/usr/bin/env python
#   J.P  aout 2017 macros python pour calc
import uno
import os
from apso_utils import  DebugWindow

def test_Debug():
    myDebug = DebugWindow(os.path.basename(__file__),"JP Debug",400,200)
    myDebug.trace("début de debug")
    myDebug.print("testing print")
    myDebug.print("voici",end=" ")
    myDebug.print("un",end=" ")
    myDebug.print("test")
    my_tuple = (1, "Hello", 3.4)
    myDebug.print(my_tuple)
    m = bytearray(1000)
    m[1:3]=[0xaa,0xbb,0xcc]
    myDebug.print(m)

g_exportedScripts = test_Debug,
voici le résultat :
APSO-DebugWindow.png
APSO-DebugWindow.png (8.52 Kio) Consulté 15677 fois
Pour l'instant la classe n'est qu'au stade expérimental et ne fonctionne que sous LibreOffice (à cause du python 3) mais si tu es intéressé je te fournirai le code pour rajouter cette classe dans le module utils de l'extension.
Ami calmant, J.P

Re: [Tous] Gérer les scripts en Python

Publié : 26 août 2017 17:48
par Hubert Lambert
Bonjour,

Merci pour l'intérêt que tu portes à cette extension.
Toutes les propositions d'améliorations sont évidemment les très bienvenues, et je serais en effet intéressé par tester ton code ;-).
Si cela t'intéresse, pourquoi ne pas contribuer au code sur Gitlab, où j'ai créé un projet pour APSO ?
Bien cordialement,

HL

Re: [Tous] Gérer les scripts en Python

Publié : 30 sept. 2017 18:50
par Hubert Lambert
Dans l'optique d'améliorer encore un peu le débogage des scripts python, suite notamment à la réflexion de Jurassic Pork, j'ai fait quelques essais pour émuler un shell python dans un environnement AOO ou LibO. L'idée est triple :
- permettre de tester rapidement des commandes python dans le contexte de l'interpréteur embarqué ;
- interagir "en direct" avec un document et les objets uno, par exemple (à partir d'un document writer) :

Code : Tout sélectionner

>>> doc = XSCRIPTCONTEXT.getDocument()
>>> doc.Text.String = "Mon texte"
- donner accès à "pdb", le débogueur interactif de la bibliothèque standard.

Vous trouverez ci-après le résultat de ces essais sous deux formes :
- une version bêta d'APSO intégrant un nouvel item "Interpréteur python" dans le menu ;
- un script indépendant pour les curieux qui voudraient tester la console sans installer APSO (fichier console.py à dézipper dans le répertoire <user>/Script/python).

Depuis APSO, pour avoir accès aux fonctions d'un module, il suffit de sélectionner ce module ou une de ses fonctions et de lancer la console via le menu. Pour lancer pdb (le module est importé automatiquement), il faut enter la commande suivante :

Code : Tout sélectionner

pdb.runcall(lafonction [, *args, **kwargs])
Dans la version APSO, il est aussi possible d'interrompre le déroulement d'un script pour explorer le contexte en insérant les lignes suivantes :

Code : Tout sélectionner

def lafonction():
    (code)
    from apso_utils import console
    console()
    (code)
Depuis le script distinct, importer le module puis lancer pdb comme ci-dessus (ne marche actuellement que pour les modules situés dans le même répertoire) :

Code : Tout sélectionner

import lemodule
pdb.runcall(lemodule.lafonction [, *args, **kwargs])
La fonction peut également être exécutée depuis le shell :

Code : Tout sélectionner

>>> lafonction()
ou

Code : Tout sélectionner

>>> lemodule.lafonction()
Le résultat :
Apso console 1.png
Je rappelle qu'il s'agit encore d'une version bêta : pdb notamment ne marchera pas très bien avec les scripts embarqués dans un document, et sans doute quelques bogues sont à attendre.
N'hésitez pas à faire part de vos remarques et suggestions (dans cette discussion de préférence). Merci :)

[Tous] Nouvelle version de l'extension APSO

Publié : 28 févr. 2024 07:53
par Jurassic Pork
Hello,
une nouvelle version d' APSO la 1.4.0 vient d'être créée. Celle-ci correspondant à la branche APSO with_pip. Elle est pour l'instant en phase Alpha c'est à dire que c'est une phase expérimentale pour voir si les fonctionnalités introduites sont opérationnelles et ne pertubent pas le reste de l'extension. Cette version contient comme nouveauté un gestionnaire de paquets par pip ce qui permet d'ajouter des modules externes contenus dans le dépôt de paquets python pypi. L'extension (apso.oxt dans le répertoire de la branche with_pip) a été testée avec des versions récentes de LibreOffice et OpenOffice sous Windows 11, Ubuntu 20.04 et Macos Catalina 10.15. Pour télécharger l'extension cliquer sur apso.oxt et dans la nouvelle fenêtre cliquer sur l'icône de téléchargement). A noter que dans le répertoire de la branche with_pip il y a le fichier LISEZMOI.md qui explique la nouvelle fonctionnalité (Gestionnaire de paquets à la fin du document). Voici à quoi cela ressemble :
APSOwithPip.png
APSOwithPip.png (24.96 Kio) Consulté 300 fois
Dans le répertoire example, il y un classeur exemple qui permet de tester le module numpy dans une macro en python. Dans ce classeur on génére des entiers aléatoires en utilisant la fonction python génératrice de tableaux numpy.random.randint. Bien lire le fichier LISEZMOI.md de ce répertoire example avant d'utiliser le classeur. Il y a des soucis avec LibreOffice sous Macos et Linux. Et pour OpenOffice il faut installer une version particulière de numpy.
Win11ApsoPipEx.gif
Win11ApsoPipEx.gif (232.92 Kio) Consulté 300 fois
Vous êtes invités à tester cette nouvelle version d'APSO. Si il y a des remarques, des problèmes utiliser le forum Macros et API.
[EDIT] Un autre exemple est disponible dans le forum Suprême de code ici.
Ami calmant, J.P