30
Docstrings Python Commenter c’est aussi documenter ! Adel Daouzli LOL (LyonOpenLab) - Viveris Technologies Mél : [email protected] Web : http://www.daouzli.com/blog/pyconfr-fr.html 25/10/2014 Adel Daouzli Docstrings - Python 1 / 30

Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Docstrings PythonCommenter c’est aussi documenter !

Adel Daouzli

LOL (LyonOpenLab) - Viveris TechnologiesMél : [email protected]

Web : http://www.daouzli.com/blog/pyconfr-fr.html

25/10/2014

Adel Daouzli Docstrings - Python 1 / 30

Page 2: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Plan

1 Introduction

2 Recommandations

3 Formats de docstrings

4 Pyment

5 Outils génération de doc

6 Questions ?

Adel Daouzli Docstrings - Python 2 / 30

Page 3: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Introduction

Commentaires

Commenter...

//C++/* C, Java, Javascript ,... */

#Python/sh...

B description / compréhension / collaborationB annotations / tags (__AUTHOR__, __DATE__, FIXME, TODO)B autogénération de documentation

Adel Daouzli Docstrings - Python 3 / 30

Page 4: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Introduction

Autogénération Documentation (Doxygen/Javadoc)

- pionniers (fin du XXe siècle)- commentaires annotés / taggés -> documentation

B Doxygen:parse tags spécifiques (\brief, \param, \retval,...) C/C++ (d’autres dontPython) Exemple:

/** \brief Brève description .** Description plus détaillée.* \param p1 un paramètre* \return le resultat de la fonction* \retval -1 échec*/int fonction (int p1);

B Javadoc tool: parse tags (@param, @return, @rtype,...) Exemple:

/** Description de la fonction .** @param p1: un paramètre* @type p1: int* @return: le resultat de la fonction* @rtype: int*/int fonction (int p1);

Adel Daouzli Docstrings - Python 4 / 30

Page 5: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Introduction

Python Docstrings (syntaxe, help, __doc__, doctest)

B « documentation string »B 2 délimiteurs possible (’ ’ ’, " " ")B chaine de caractère multiligneB description : début fonction / 1ers args de classe (__init__)B doctest -> petits tests

""">>> a = 2>>> b = 5>>> a + b7"""

Adel Daouzli Docstrings - Python 5 / 30

Page 6: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Introduction

Python Docstrings (syntaxe, help, __doc__, doctest)

B introspectionB récupérer la docstring de n’importe quel élément Python via l’attribut __doc__B iPython permet d’obtenir la docstring ajoutant ? à un élémentB fonction help() fournit documentation interactive comme un man (Pydoc)

Adel Daouzli Docstrings - Python 6 / 30

Page 7: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Plan

1 Introduction

2 Recommandations

3 Formats de docstrings

4 Pyment

5 Outils génération de doc

6 Questions ?

Adel Daouzli Docstrings - Python 7 / 30

Page 8: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Recommandations

PEPs: recommandations globales

B PEP 8: docstring == chaine de caractères, cf PEP257◦ docstrings pour tout module, classe, fonction et méthode publique. (méthodes

non-publiques peuvent se contenter de commentaires)◦ important """ de fin de multi-lignes doit être seul sur la ligne.◦ docstring d’une ligne: """ sur la même ligne

- PEP 257: description haut niveau◦ tout modules devrait avoir une docstring◦ fonctions/classes exportées, méthodes publiques (__init__())◦ __init__.py d’un paquetage◦ « attribute docstring »: assignation docstring début module, classe, __init__◦ préfixes de chaine r (raw) et u (unicode)

r"""ceci \n est échapé"""

◦ description triplecotée même sur une ligne (délimiteurs sur la même ligne)◦ description IMPERATIVE ("return this")◦ ne pas répéter signature de fonction/méthode (introspection)◦ multiligne: brève description, ligne vide, description détaillée◦ multiligne: ligne vide avant/après (sauf fonctions/méthodes)◦ multiligne: indentation précédant 1 délimiteur retirée aux lignes suivantes◦ "override" pour remplace méthode, "extend" pour étend méthode de classe mère

Adel Daouzli Docstrings - Python 8 / 30

Page 9: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Recommandations

PEPs: Autres recommandations

D’autres PEP parlent aussi de docstrings:B PEP 256 - «Docstring Processing System Framework»

Mais la PEP commence par:Rejection NoticeThis proposal seems to have run out of steam.

B PEP 258 - «Docutils Design Specification»De même la PEP commence par:Rejection NoticeWhile this may serve as an interesting design document for thenow-independent docutils, it is no longer slated for inclusion in the standardlibrary.

B PEP 287 - «reStructuredText Docstring Format»Il est recommandé d’utiliser le reStructuredText comme format pour les DocstringsPython.Le reST fait partie du projet Docutils.

Adel Daouzli Docstrings - Python 9 / 30

Page 10: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Plan

1 Introduction

2 Recommandations

3 Formats de docstrings

4 Pyment

5 Outils génération de doc

6 Questions ?

Adel Daouzli Docstrings - Python 10 / 30

Page 11: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Formats de docstrings

Javadoc / Epytext

B 1er formalisme PythonB hérité du format JavadocB interpréteur: EpydocB tend à disparaître

Exemple:

"""This is a Epytext style description .@param param1: this is a first param@type param1: int@param param2: this is a second param@type param2: str@return: this is a description of what is returned@rtype: bool@raise keyError: raises an exception"""

Adel Daouzli Docstrings - Python 11 / 30

Page 12: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Formats de docstrings

reStructuredText

B tags reST pour PythonB format de docstring le plus populaire.B très répandu.B préconisé par la PEP 287.B utilise des tags de docstrings très ressemblant avec la syntaxe d’Epytext (et donc

Javadoc).B interpréteur: Sphinx.B utilisé au-delà des docstrings Python (CMake, wikis, blogs, Github, Trac, Project

Gutenberg...)

Exemple:

"""This is a reST style.:param param1: this is a first param:type param1: int:param param2 str: this is a second param:returns: this is a description of what is returned:rtype: bool:raises keyError: raises an exception"""

Adel Daouzli Docstrings - Python 12 / 30

Page 13: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Formats de docstrings

Google

Le format Google pour les docstrings:B supporté par Google.B assez répandu.B interpréteur: plugin pour SphinxB regroupement d’éléments (section paramètres, section valeurs de retour,...).B ressources: Guide de style de Google: http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#CommentsExemples: http://sphinxcontrib-napoleon.readthedocs.org/en/latest/example_google.html

Exemple:

"""This is a groups style docs.Args:

param1 (int): this is the first paramparam2 (str): this is a second param

Returns:bool: This is a description of what is returned

Raises:KeyError: raises an exception

"""

Adel Daouzli Docstrings - Python 13 / 30

Page 14: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Formats de docstrings

Numpydoc

Le format Numpydoc pour les docstrings:B très répandu dans le monde scientifique (mais pas uniquement)B structure proche de Google (regroupement par sections).B syntaxe également basée sur reST.B interpréteur: plugins pour SphinxB ressources: guide sur le Github du projet Numpy:https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt

Adel Daouzli Docstrings - Python 14 / 30

Page 15: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Formats de docstrings

Numpydoc

Exemple:

"""My numpydoc description of a kindof very exhautive numpydoc format docstring .

Parameters----------first : array_like

the 1st param name ’first’second : {’value’, ’other’}, optional

the 2nd param, by default ’value’Returns-------string

a value in a stringRaises------KeyError

when a key errorOtherError

when an other error"""

Adel Daouzli Docstrings - Python 15 / 30

Page 16: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Plan

1 Introduction

2 Recommandations

3 Formats de docstrings

4 Pyment

5 Outils génération de doc

6 Questions ?

Adel Daouzli Docstrings - Python 16 / 30

Page 17: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Pyment

Pyment

B licence GPL3B créer des docstrings (squelettes)B convertir des docstringsB formats acceptés: reST, google, numpydoc, javadocB parse module (pas d’import)B génère des patchsB pas de dépendanceB Python 2.7/3+ (2.6 avec argparser)B sources: https://github.com/dadadel/pyment\ Tuto:http://daouzli.com/blog/pyment.html

Adel Daouzli Docstrings - Python 17 / 30

Page 18: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Pyment

Installation

git clone https://github.com/dadadel/pyment.gitvirtualenv envsource env/binpip install -e pyment# ou:cd pyment && python setup.py installpyment -h # pour afficher l’aide

Adel Daouzli Docstrings - Python 18 / 30

Page 19: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Pyment

Utilisation

Format de sortie par défaut: reStructuredText

pyment fichier.py# génère le patche *fichier.py.patch*patch -p1 < fichier.py.patch# docstrings créées/converties au format reStructuredText

ou un module :

pyment mon/dossier# produit dans le dossier actuel les patches des fichiers trouvés

Adel Daouzli Docstrings - Python 19 / 30

Page 20: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Pyment

Options

B -h/--help:afficher le message d’aide (liste des options)B -v/--version:afficher la version de PymentB -c FICHIER: récupère les options depuis un ficheir de configurationB -o/--output STYLE: reST, google, numpydoc or javadoc (défaut reST)B -q/--quotes:type de délimiteur ’ ’ ’ ou " " " (défaut " " ")B -f/--first-line BOOL: commentaire doit commencer à la ligne suivant le

délimiteurB -t/--convert BOOL: convertit seulement les docstrings existantes (n’en génère pas)B -d/--init2class BOOL: si la classe n’a pas de docstring, y palcer celle de

__init__().B -p/--ignore-private BOOL: ne pas générer de docstring pour les classes

débutant par un double underscore (__)

Exemples

pyment -q "’’’" example.py# génère format reST avec des ’’’ au lieu de """pyment -o google example.py# génère format Googlepyment -o numpydoc -t example.py# génère format Numpydoc uniquement pour les docstrings existantes

Adel Daouzli Docstrings - Python 20 / 30

Page 21: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Pyment

# Patch generated by Pyment v0.2.0--- a/example.py+++ b/example.py@@ -1,21 +1,23 @@def func(prm1=True, prm2=’val’):- ’’’Description of groups style (Googledoc).+ """Description of groups style (Googledoc).

- Params:- prm1 - descr of prm1 with True default value.- prm2 - descr of prm2+ :param prm1: descr of prm1 with True default value+ :param prm2: descr of prm2 (Default value = ’val’)+ :returns: some value+ :raises keyError: raises key exception+ :raises TypeError: raises type exception

- Returns:- some value-- Raises:- keyError: raises key exception- TypeError: raises type exception-- ’’’+ """

pass

class A:+ """ """

def method(self, prm1, prm2=None):+ """++ :param prm1:+ :param prm2: (Default value = None)++ """

pass

Adel Daouzli Docstrings - Python 21 / 30

Page 22: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Pyment

Conversion vers reStructuredText

Avant

def func ( prm1=True , prm2= ’ va l ’ ) :’ ’ ’ Desc r i p t i on o f groups s t y l e ( Googledoc ) .

Params :prm1 − descr o f prm1 wi th True as d e f a u l t .prm2 − descr o f prm2

Returns :some value

Raises :keyError : ra i ses key except ionTypeError : ra i ses type except ion

’ ’ ’pass

c lass A:def method ( s e l f , prm1 , prm2=None ) :

pass

Après

def func ( prm1=True , prm2= ’ va l ’ ) :" " " Desc r i p t i on o f groups s t y l e ( Googledoc ) .

: param prm1 : descr o f prm1 wi th True as d e f a u l t .: param prm2 : descr o f prm2 ( De fau l t value = ’ va l ’ ): r e tu rns : some value: ra i ses keyError : r a i ses key except ion: ra i ses TypeError : ra i ses type except ion

" " "pass

c lass A:" " " " " "def method ( s e l f , prm1 , prm2=None ) :

" " "

: param prm1 :: param prm2 : ( De fau l t value = None )

" " "pass

Adel Daouzli Docstrings - Python 22 / 30

Page 23: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Plan

1 Introduction

2 Recommandations

3 Formats de docstrings

4 Pyment

5 Outils génération de doc

6 Questions ?

Adel Daouzli Docstrings - Python 23 / 30

Page 24: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Outils génération de doc

Pydoc

B module intégré à Python (>= 2.1)B fonction help() de PythonB indépendant de Python, ligne de commandeB documentation interactive (équivalent à help())

pydoc os # démarre une aide interactive pour le module os

B serveur HTTP

pydoc -p 8080 # démarre serveur HTTP port 8080 de la machine local

B génère de la documentation HTML

pydoc -w toto # génère une documentation HTML

Adel Daouzli Docstrings - Python 24 / 30

Page 25: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Outils génération de doc

Epydoc/HappyDoc

B Epydoc importe moduleB HappyDoc: parse moduleB développé en PythonB générer une documentation pour modules PythonB 1ère version publiée en 2002B dernière version en 2008 : 3.0.1B site officiel: http://epydoc.sourceforge.net .B supporte le Epytext mais peut aussi gérer reST et JavadocB peut être utilisé en ligne de commandeB possède une interface graphique (old school :p)B peut générer des graphs avec GraphvizB peut générer du HTML ainsi que du PDF (via LaTeX)

Adel Daouzli Docstrings - Python 25 / 30

Page 26: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Outils génération de doc

Sphinx & reStructuredText

B licence BSDB générer de belles documentationsB créé pour générer la documentation de PythonB parse du Python (C/C++, et d’autres langages dans le futur)B traiter des documentations au-delà d’APIsB générer du HTML, LaTeX (et donc PDF), ePub, Texinfo, des man, du texteB coloration syntaxiqueB nombreuses extensionsB interprête reStructuredTextB ressources : http://sphinx-doc.org

Adel Daouzli Docstrings - Python 26 / 30

Page 27: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Outils génération de doc

Sphinx & reStructuredText

Installation:B depuis vos dépôts (sudo apt-get install python-sphinx)B télécharger depuis pypi (https://pypi.python.org/pypi/Sphinx)B easy_install -U SphinxB pip install Sphinx

Utilisation:B non trivialeB scripts de préparationB plusieurs méthodes d’utilisation (interactif avec sphinx-quickstart)

Exemple:Voici comment convertir en HTML avec sphinx-apidoc le module dans le dossier src/ :

mkdir docssphinx-apidoc -F -o docs src/# il faut décommenter vers le début du fichier docs/conf.py la ligne ressemblant à:# sys.path.insert(0, os.path.abspath(’/home/user/src/projet/src/’))make html

Votre doumentation est générée dans docs/_build/html (index.html).

Adel Daouzli Docstrings - Python 27 / 30

Page 28: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Outils génération de doc

Sphinx Napoleon/Numpydoc

B NapoleonL’extension Sphinx Napoleon: docstrings au format Google et Numpydochttps://pypi.python.org/pypi/sphinxcontrib-napoleon

B NumpydocNumpydoc se base sur plusieurs extensions Sphinx pour gérer le format Numpydoc:https://pypi.python.org/pypi/numpydoc

Adel Daouzli Docstrings - Python 28 / 30

Page 29: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Plan

1 Introduction

2 Recommandations

3 Formats de docstrings

4 Pyment

5 Outils génération de doc

6 Questions ?

Adel Daouzli Docstrings - Python 29 / 30

Page 30: Docstrings Python - Commenter c'est aussi documenter · Formats de docstrings reStructuredText B tags reST pour Python B format de docstring le plus populaire. B très répandu. B

Questions ?

Fin

Merci pour votre attention...http://www.daouzli.com/blog/pyconfr-fr.html

Adel Daouzli Docstrings - Python 30 / 30