J'ai écrit un epyText à Y a-t-il un moyen intelligent de lire toutes les Docstrings dans un module et de rédiger les remplacements? p>
PS: Ast Module peut-être? p>
4 Réponses :
Probablement le plus simple de le faire à l'ancienne. Voici un code initial pour vous faire aller. Cela pourrait probablement être plus jolie mais devrait donner l'idée de base: Pour le rendre véritablement fonctionnel, vous devez le connecter avec un filet de fichier et sortir les fichiers dans un autre répertoire. Découvrez le Module OS.Path pour référence. P> Je sais que la vérification liée à la doctrine est potentiellement très faible. C'est probablement une bonne idée de le renforcer un peu (ligne de bande et vérifiez si cela commence ou se termine par une liaison de doctorat). P> Espérons que cela donne une idée de la procédure à suivre. Peut-être qu'il y a un moyen plus élégant de gérer le problème. :) p> p>
Marcher à travers ma structure de répertoire et les fichiers d'ouverture / lecture / écriture sont triviaux. Ma question est la suivante: Y a-t-il une façon intelligente de lire toutes les Docstrings dans un module et de rédiger les remplaçants? Cela ne peut pas être fait naïvement avec des mécanismes tels que des expressions régulières (comme RE.Finditer ('\ "\" \ "(. *) \" \ "\"', Source), parce que je ne veux pas gâcher le reste de code.
J'ai trouvé une question similaire que vous pourriez trouver intéressante. Voir
Les Docstrings ne sont pas tenus d'avoir des chaînes triples citées, et tout n'est pas cité avec une chaîne triple citée est une doctrine, cela ne fonctionne donc que pour un sous-ensemble de Python Docstrings.
Je m'interroge sur une combinaison d'introspection et de traitement des sources. Voici quelques pseudocodes non testés:
import foo #where foo is your module with open('foo.py',r) as f: src = f.readlines() for pything in dir(foo): #probably better ways to do this... try: docstring = pything.__doc__ except AttributeError: #no docstring here pass #modify the docstring new_docstring = my_format_changer(docstring) #now replace it in the source src = src.replace(docstring, new_docstring) #When done, write it out with open('new_foo.py','w') as fout: fout.write(src)
Ce pourrait être une overkilleuse pour cette utilisation simple, mais je regarderais à l'aide de la machinerie de épydoc semble contenir un to_rst () code>
méthode qui pourrait vous aider à traduire les Docstrings. Je ne sais pas si c'est bon ... p>
pyment strong> est un outil capable de convertir Python Docstrings et de créer manquant les squelettes. Il peut gérer Google strong>, épydoc strong> (style Javadoc), Numpydoc strong>, restructurétextText strong> (reste, SPHINX par défaut) formats de docstring . Il accepte un seul fichier ou un dossier (explorer également les sous-dossiers). Pour chaque fichier, il reconnaîtra chaque format Docstring et le convertira à la personne souhaitée. À la fin, un patch sera généré pour s'appliquer au fichier. P> Tapez ce qui suit (vous pouvez utiliser un virtualenv): p> Vous pouvez convertir votre projet au format SPHINX (SPHINX), qui correspond au format de sortie par défaut, en faisant: p> Pour convertir votre projet: H1>
Installation à l'aide de