[Tous] Gérer les scripts en Python

Tout savoir sur les extensions et aller plus loin avec vos suites bureautiques préférées.
Les questions sur la programmation des OXT doivent être postées dans la section Macros située plus bas.

Modérateur: Vilains modOOs

Règles du forum
Cette section est faite pour présenter des extensions visant à améliorer ou ajouter des fonctionnalités.
Vous pouvez commenter ou ajouter des remarques sur l'extension. Mais, si vous avez une question sur l'installation, le fonctionnement ou l'utilisation, vous devez poster dans la section du logiciel où se produit le problème (Writer, Calc, Impress, Draw, Math ou Base).
Si vous désirez publier une extension, merci de contacter un modérateur par MP.

[Tous] Gérer les scripts en Python

Messagepar Hubert Lambert » 09 Nov 2016 16:49

 
 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é 2503 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é 2749 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. 
Pièces jointes
apso_v0.8.7.oxt
6.6.2017
(26.88 Kio) Téléchargé 72 fois
Dernière édition par Hubert Lambert le 18 Juin 2017 17:21, édité 6 fois.
AOOo 4.1.2 sur Win7 | LibreOffice 5.x sur divers systèmes Linux
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
PassiOOnné
PassiOOnné
 
Message(s) : 656
Inscrit le : 06 Avr 2016 08:26

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

Messagepar OlivierR » 05 Juin 2017 19:38

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.
LibreOffice 5.4Windows 10Orthographe & GrammaireBépo, le clavier du futur
OlivierR
SuppOOrter
SuppOOrter
 
Message(s) : 1012
Inscrit le : 24 Mai 2006 21:34
Localisation : Lorraine, France

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

Messagepar Hubert Lambert » 06 Juin 2017 19:13

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.
AOOo 4.1.2 sur Win7 | LibreOffice 5.x sur divers systèmes Linux
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
PassiOOnné
PassiOOnné
 
Message(s) : 656
Inscrit le : 06 Avr 2016 08:26

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

Messagepar Jurassic Pork » 26 Août 2017 12:49

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é 1200 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
LibreOffice 5.x sous windows et linux
Avatar de l’utilisateur
Jurassic Pork
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 95
Inscrit le : 09 Août 2017 23:15

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

Messagepar Hubert Lambert » 26 Août 2017 16:48

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
AOOo 4.1.2 sur Win7 | LibreOffice 5.x sur divers systèmes Linux
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
PassiOOnné
PassiOOnné
 
Message(s) : 656
Inscrit le : 06 Avr 2016 08:26

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

Messagepar Hubert Lambert » 30 Sep 2017 17:50

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 :)
Pièces jointes
Console.py.zip
Version indépendante (v3)
(5.6 Kio) Téléchargé 20 fois
apso_v1.1.0.oxt
Version intégrée à APSO
(30.37 Kio) Téléchargé 37 fois
AOOo 4.1.2 sur Win7 | LibreOffice 5.x sur divers systèmes Linux
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
PassiOOnné
PassiOOnné
 
Message(s) : 656
Inscrit le : 06 Avr 2016 08:26


Retour vers Extensions

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité