Page 1 sur 1

A propos du code python

Posté : 04 sept. 2019 - 21:30
par frferrer
Bonsoir,

en relisant quelques exemples de code, je m’interroge sur une instruction qui apparaît dans la documentation et dans quelques paquets.

Notamment dans la doc suivante https://www.wapt.fr/fr/doc/wapt-create- ... g-software

Voici le code en question :

Code : Tout sélectionner

for soft in installed_softwares('winscp3'):
    if Version(soft['version']) < Version('5.0.2'):
        run(WAPT.uninstall_cmd(soft['key']))
L'instruction uninstall_cmd est une fonction du module setuphelpers.
Ce module est chargé dans tous les fichiers setup.py en tête du fichier avec l'instruction

Code : Tout sélectionner

from setuphelpers import *
Du coup je ne comprends pas bien l'intérêt d'utiliser WAPT.uninstall_cmd par rapport à un simple uninstall_cmd.
Ce qui donne le code suivant :

Code : Tout sélectionner

for soft in installed_softwares('winscp3'):
    if Version(soft['version']) < Version('5.0.2'):
        run(uninstall_cmd(soft['key']))
De ce que je comprends WAPT est un objet contenant des méthodes du module setuphelpers.

D'où les questions suivantes :
  • Où est instancié cet objet WAPT ? A quoi sert-il ?
  • Pourquoi utiliser la méthode uninstall_cmd de l'objet WAPT plutôt que la fonction uninstall_cmd du module setuphelpers ?
  • Quel est l'avantage d'utiliser cette méthode ?
Merci.

Re: A propos du code python

Posté : 06 sept. 2019 - 17:23
par htouvet
common.Wapt.uninstall_cmd est un alias de setuphelpers.uninstall_cmd, sûrement pour des problèmes de rétrocompatibilité.

L'instance WAPT (de la classe common.Wapt) que l'on peut utiliser dans les fonctions hook install() uninstall() session_setup() audit() de setup.py est une variable objet instanciée par le client wapt et automatiquement injectée dans le namespace du module setup avant l'appel de la fonction, un peu comme une variable implicite built-in... voir par exemple : https://github.com/tranquilit/WAPT/blob ... n.py#L3701

Initialement, cela avait fait comme cela pour éviter une liste explicite de paramètres dans les définitions de fonction install etc... pour ne pas alourdir le contenu de setup.py pour les packageurs débutants, cette variable étant rarement utilisée.

L'objet WAPT (classe common.Wapt) permet d'accéder à l'état actuel du client wapt et l'API associée et lancer des commande explicites WAPT.install('paquet') WAPT.remove('paquet'), WAPT.forget('paquet'), etc... un peu comme on le fait en ligne de commande avec wapt-get install , wapt-get remove mais dans le code python.

Re: A propos du code python

Posté : 09 sept. 2019 - 22:02
par frferrer
Bonsoir,

merci pour cette explication de texte, c'est plus clair.

Pas évident pour les débutants de s'y retrouver lorsque les 2 écritures sont utilisées.

Puis-je suggérer que soit nettoyé l'exemple de code dans la documentation pour ne garder que la syntaxe

Code : Tout sélectionner

run(uninstall_cmd())
; et ne conserver l'utilisation de WAPT.<méthode> que pour ce qu'il est, c'est à dire l'instance du client WAPT ?
https://www.wapt.fr/fr/doc/wapt-create- ... g-software

Merci.

Re: A propos du code python

Posté : 16 sept. 2019 - 18:25
par sfonteneau
Il faut effectivement nettoyer ...

D’ailleurs nous n'avons pas trop communiqué dessus mais vous pouvez vous même modifier la doc avec des pull request :

La documentation est ici.

https://github.com/tranquilit/WAPT-Documentation

Nous avons de moins en moins de temps pour faire de la documentation.

Une aide de la communauté serait la bienvenue !

Vous pouvez directement faire des pull-request !