[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.
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

[Tous] Gérer les scripts en Python

Message 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é 16974 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é 17220 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. 
Pièces jointes
apso_v0.8.7.oxt
6.6.2017
(26.88 Kio) Téléchargé 823 fois
Dernière modification par Hubert Lambert le 18 juin 2017 18:21, modifié 6 fois.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
OlivierR
SuppOOrter
SuppOOrter
Messages : 1037
Inscription : 24 mai 2006 22:34
Localisation : Lorraine, France
Contact :

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

Message 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.
LibreOffice 7.1Windows 10Grammalecte, correcteur grammatical et orthotypographique
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message 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.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 623
Inscription : 10 août 2017 00:15

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

Message 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é 15671 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 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message 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
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message 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 :)
Pièces jointes
Console.py.zip
Version indépendante (v3)
(5.6 Kio) Téléchargé 687 fois
apso_v1.1.0.oxt
Version intégrée à APSO
(30.37 Kio) Téléchargé 712 fois
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 623
Inscription : 10 août 2017 00:15

[Tous] Nouvelle version de l'extension APSO

Message 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é 294 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é 294 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
Pièces jointes
LISEZMOI_APSO_withPIP.pdf
(301.52 Kio) Téléchargé 21 fois
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Répondre