Page 1 sur 1

[Tous] Gérer les scripts en Python

MessagePublié: 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é 2544 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é 2790 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   AgrandirRéduire
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

MessagePublié: 05 Juin 2017 19: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

MessagePublié: 06 Juin 2017 19: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

MessagePublié: 26 Août 2017 12: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   AgrandirRéduire
#!/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é 1241 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

MessagePublié: 26 Août 2017 16: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

MessagePublié: 30 Sep 2017 17: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   AgrandirRéduire
>>> 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   AgrandirRéduire
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   AgrandirRéduire
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   AgrandirRéduire
import lemodule
pdb.runcall(lemodule.lafonction [, *args, **kwargs])

La fonction peut également être exécutée depuis le shell :
Code : Tout sélectionner   AgrandirRéduire
>>> lafonction()
ou
Code : Tout sélectionner   AgrandirRéduire
>>> 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 :)