6
votes

Remplacer Python Docstrings

J'ai écrit un epyText à REST Le convertisseur de balisage, et maintenant je souhaite convertir toutes les docstrations de ma bibliothèque entière depuis EPYTEXT au format de repos.

Y a-t-il un moyen intelligent de lire toutes les Docstrings dans un module et de rédiger les remplacements?

PS: Ast Module peut-être?


0 commentaires

4 Réponses :


0
votes

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: xxx

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.

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).

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. :)


3 commentaires

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 Stackoverflow.com/Questtions/768634/... .


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.



0
votes

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)


0 commentaires

2
votes

Ce pourrait être une overkilleuse pour cette utilisation simple, mais je regarderais à l'aide de la machinerie de 2to3 pour faire l'édition. Vous devez juste écrire un fixateur personnalisé. Ce n'est pas bien documenté, mais Guide du développeur de Python 3.0: Python 2.6 et migration de 2 à 3: plus environ 2to3 et Mettre en œuvre les fixateurs personnalisés donne assez de détails pour commencer ...

épydoc semble contenir un to_rst () méthode qui pourrait vous aider à traduire les Docstrings. Je ne sais pas si c'est bon ...


0 commentaires

4
votes

pyment est un outil capable de convertir Python Docstrings et de créer manquant les squelettes. Il peut gérer Google , épydoc (style Javadoc), Numpydoc , restructurétextText (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.

Pour convertir votre projet:
  • installer pyment

    Tapez ce qui suit (vous pouvez utiliser un virtualenv): xxx

    • convertissez de l'épydoc en Sphinx

      Vous pouvez convertir votre projet au format SPHINX (SPHINX), qui correspond au format de sortie par défaut, en faisant: xxx

      EDIT: < / strong>

      Installation à l'aide de pip : xxx


0 commentaires