Docstrings Python. Commenter c est aussi documenter! Adel Daouzli

Documents pareils
Gestion du projet pour qu'il soit pérenne et collaboratif

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TP1. Outils Java Eléments de correction

Programmation Web. Madalina Croitoru IUT Montpellier

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

TP 1. Prise en main du langage Python

WDpStats Procédure d installation

Programmation en Java IUT GEII (MC-II1) 1

Alfstore workflow framework Spécification technique

Votre premier projet Android

as Architecture des Systèmes d Information

Plan du cours. Historique du langage Nouveautés de Java 7

2 Formation utilisateur

INSTALLATION ET CONFIGURATION DE OPENLDAP

Déploiement OOo en environnement Windows Terminal Server

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Gestion Electronique de Document (ECM/GED)

Calcul Scientifique avec 3

Le Cloud: Mythe ou Réalité?

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

TP1 : Initiation à Java et Eclipse

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Présentation du langage et premières fonctions

Sécurité Informatique. Description. Prérequis. Un petit test avant de commencer s embourber

Environnements de développement (intégrés)

Les classes en Python

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Les bases du langage Python

Installation de VirtualPOPC-1 sur Ubuntu Server LTS 64bits

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Java Licence Professionnelle CISII,

WEB page builder and server for SCADA applications usable from a WEB navigator

Guide de formation EndNote Web Interface EndNote Web

Environnements et Outils de Développement Cours 1 Introduction

ECLIPSE ET PDT (Php development tools)

OpenPaaS Le réseau social d'entreprise

Cellier Clément, Maginot Quentin, Tripier Axel, Zaorski Jean, Zini Robin. 18 mars 2015

Pratique et administration des systèmes

WordPress : principes et fonctionnement

Le stockage local de données en HTML5

VTP. LAN Switching and Wireless Chapitre 4

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

TD3: tableaux avancées, première classe et chaînes

Gérer ses environnements de développement avec Vagrant RMLL 2012

Prototyper un site web avec Awestruct et Boostrap

Nouvelle version de Zonecheck, la 3.0, avec tests DNSSEC

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Outils gratuits de présentation de documents «animés» Issuu - Slideshare

INSTALLATION NG V2.1 D OCS INVENTORY. Procédure d utilisation. Auteur : GALLEGO Cédric 23/10/2014 N version : v1

Introduction aux Machines Virtuelles avec VMKit

Déploiement d OCS 1.02 RC2 sous Debian Etch 64

Projet de Semestre. Page Web Didactique de Visualisation d Algorithme. Université de Genève - semestre de printemps 2012

Création d un service web avec NetBeans 5.5 et SJAS 9

titre : CENTOS_CUPS_install&config Système : CentOs 5.7 Technologie : Cups Auteur : Charles-Alban BENEZECH

Cours de Programmation 2

Architectures Web Services RESTful

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

Serveur DNS et DHCP couplé à LDAP Debian GNU/Linux

ACTIVITÉ DE PROGRAMMATION

Algorithmique et Programmation, IMA

SYSTÈMES DE PUBLICATION POUR L INTERNET. Beatep Marie-France Landréa - Observatoire de Paris

modules & compilation

Client windows Nagios Event Log

Éléments de programmation et introduction à Java

CLOUD COMPUTING et Relation Client/Fournisseur Une Révolution culturelle?

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

REMBO Version 2.0. Mathrice 2004 DESCRIPTION MISE EN OEUVRE CONCLUSION.

Python Les fondamentaux du langage

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Instructions Mozilla Thunderbird Page 1

Convers3 Documentation version Par Eric DAVID : vtopo@free.fr

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Quelques mots à propos de Sage

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

ShareLatex, éditeur Latex collaboratif auto-hebergé : retour d expérience au LE2I

Arguments d un programme

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Java Licence Professionnelle CISII,

Génération de code binaire pour application multimedia : une approche au vol

Environnements de développement (intégrés)

RULE 5 - SERVICE OF DOCUMENTS RÈGLE 5 SIGNIFICATION DE DOCUMENTS. Rule 5 / Règle 5

Table des matières. 1. Installation de VMware ESXI Pré-requis Installation... 3

FOURNIR UN SERVICE DE BASE DE DONNÉES FLEXIBLE. Database as a Service (DBaaS)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Vérification formelle de la plate-forme Java Card

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Serveur d Applications Web : WebObjects

Web Tier : déploiement de servlets

Notes de cours Practical BigData

Entraînement au concours ACM-ICPC

Corrigé des exercices sur les références

Configurer la supervision pour une base MS SQL Server Viadéis Services

TP1 : Initiation à Java et Eclipse

Transcription:

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

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

Introduction Commentaires Commenter... //C++ /* C, Java, Javascript,... */ #Python/sh... description / compréhension / collaboration annotations / tags ( AUTHOR, DATE, FIXME, TODO) autogénération de documentation Adel Daouzli Docstrings - Python 3 / 30

Introduction Autogénération Documentation (Doxygen/Javadoc) - pionniers (fin du XXe siècle) - commentaires annotés / taggés -> documentation Doxygen: parse tags spécifiques (\brief, \param, \retval,...) C/C++ (d autres dont Python) 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); 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

Introduction Python Docstrings (syntaxe, help, doc, doctest) «documentation string» 2 délimiteurs possible (, " " ") chaine de caractère multiligne description : début fonction / 1ers args de classe ( init ) doctest -> petits tests """ >>> a = 2 >>> b = 5 >>> a + b 7 """ Adel Daouzli Docstrings - Python 5 / 30

Introduction Python Docstrings (syntaxe, help, doc, doctest) introspection récupérer la docstring de n importe quel élément Python via l attribut doc ipython permet d obtenir la docstring ajoutant? à un élément fonction help() fournit documentation interactive comme un man (Pydoc) Adel Daouzli Docstrings - Python 6 / 30

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

Recommandations PEPs: recommandations globales 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

Recommandations PEPs: Autres recommandations D autres PEP parlent aussi de docstrings: PEP 256 - «Docstring Processing System Framework» Mais la PEP commence par: Rejection Notice This proposal seems to have run out of steam. PEP 258 - «Docutils Design Specification» De même la PEP commence par: Rejection Notice While this may serve as an interesting design document for the now-independent docutils, it is no longer slated for inclusion in the standard library. PEP 287 - «restructuredtext Docstring Format» Il est recommandé d utiliser le restructuredtext comme format pour les Docstrings Python. Le rest fait partie du projet Docutils. Adel Daouzli Docstrings - Python 9 / 30

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

Formats de docstrings Javadoc / Epytext Exemple: 1er formalisme Python hérité du format Javadoc interpréteur: Epydoc tend à disparaître """ 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

Formats de docstrings restructuredtext tags rest pour Python format de docstring le plus populaire. très répandu. préconisé par la PEP 287. Exemple: utilise des tags de docstrings très ressemblant avec la syntaxe d Epytext (et donc Javadoc). interpréteur: Sphinx. utilisé au-delà des docstrings Python (CMake, wikis, blogs, Github, Trac, Project Gutenberg...) """ 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

Formats de docstrings Google Le format Google pour les docstrings: Exemple: supporté par Google. assez répandu. interpréteur: plugin pour Sphinx regroupement d éléments (section paramètres, section valeurs de retour,...). ressources: Guide de style de Google: http: //google-styleguide.googlecode.com/svn/trunk/pyguide.html#comments Exemples: http://sphinxcontrib-napoleon.readthedocs.org/en/latest/ example_google.html """ This is a groups style docs. Args: param1 (int): this is the first param param2 (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

Formats de docstrings Numpydoc Le format Numpydoc pour les docstrings: très répandu dans le monde scientifique (mais pas uniquement) structure proche de Google (regroupement par sections). syntaxe également basée sur rest. interpréteur: plugins pour Sphinx 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

Formats de docstrings Numpydoc Exemple: """ My numpydoc description of a kind of 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 string Raises ------ KeyError when a key error OtherError when an other error """ Adel Daouzli Docstrings - Python 15 / 30

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

Pyment Pyment licence GPL3 créer des docstrings (squelettes) convertir des docstrings formats acceptés: rest, google, numpydoc, javadoc parse module (pas d import) génère des patchs pas de dépendance Python 2.7/3+ (2.6 avec argparser) sources: https://github.com/dadadel/pyment\ Tuto: http://daouzli.com/blog/pyment.html Adel Daouzli Docstrings - Python 17 / 30

Pyment Installation git clone https://github.com/dadadel/pyment.git virtualenv env source env/bin pip install -e pyment # ou: cd pyment && python setup.py install pyment -h # pour afficher l aide Adel Daouzli Docstrings - Python 18 / 30

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

Pyment Options -h/--help:afficher le message d aide (liste des options) -v/--version:afficher la version de Pyment -c FICHIER: récupère les options depuis un ficheir de configuration -o/--output STYLE: rest, google, numpydoc or javadoc (défaut rest) -q/--quotes:type de délimiteur ou " " " (défaut " " ") -f/--first-line BOOL: commentaire doit commencer à la ligne suivant le délimiteur -t/--convert BOOL: convertit seulement les docstrings existantes (n en génère pas) -d/--init2class BOOL: si la classe n a pas de docstring, y palcer celle de init (). -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 Google pyment -o numpydoc -t example.py # génère format Numpydoc uniquement pour les docstrings existantes Adel Daouzli Docstrings - Python 20 / 30

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): + """ + Adel Daouzli Docstrings - Python 21 / 30

Pyment Conversion vers restructuredtext Avant def func (prm1=true, prm2= val ) : D e s c r i p t i o n of groups s t y l e ( Googledoc ). Params : prm1 descr of prm1 with True as default. prm2 descr of prm2 Returns : some value Raises : keyerror : raises key exception TypeError : r a i s e s type exception pass class A : def method ( self, prm1, prm2=none ) : pass Après def func (prm1=true, prm2= val ) : " " " D e s c r i p t i o n of groups s t y l e ( Googledoc ). : param prm1 : descr of prm1 with True as default. : param prm2 : descr of prm2 ( D e f a u l t value = v a l ) : returns : some value : raises keyerror : raises key exception : r a i s e s TypeError : r a i s e s type exception " " " pass class A : " " " " " " def method ( self, prm1, prm2=none ) : " " " : param prm1 : : param prm2 : ( D e f a u l t value = None ) " " " pass Adel Daouzli Docstrings - Python 22 / 30

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

Outils génération de doc Pydoc module intégré à Python (>= 2.1) fonction help() de Python indépendant de Python, ligne de commande documentation interactive (équivalent à help()) pydoc os # démarre une aide interactive pour le module os serveur HTTP pydoc -p 8080 # démarre serveur HTTP port 8080 de la machine local génère de la documentation HTML pydoc -w toto # génère une documentation HTML Adel Daouzli Docstrings - Python 24 / 30

Outils génération de doc Epydoc/HappyDoc Epydoc importe module HappyDoc: parse module développé en Python générer une documentation pour modules Python 1ère version publiée en 2002 dernière version en 2008 : 3.0.1 site officiel: http://epydoc.sourceforge.net. supporte le Epytext mais peut aussi gérer rest et Javadoc peut être utilisé en ligne de commande possède une interface graphique (old school :p) peut générer des graphs avec Graphviz peut générer du HTML ainsi que du PDF (via LaTeX) Adel Daouzli Docstrings - Python 25 / 30

Outils génération de doc Sphinx & restructuredtext licence BSD générer de belles documentations créé pour générer la documentation de Python parse du Python (C/C++, et d autres langages dans le futur) traiter des documentations au-delà d APIs générer du HTML, LaTeX (et donc PDF), epub, Texinfo, des man, du texte coloration syntaxique nombreuses extensions interprête restructuredtext ressources : http://sphinx-doc.org Adel Daouzli Docstrings - Python 26 / 30

Outils génération de doc Sphinx & restructuredtext Installation: Utilisation: depuis vos dépôts (sudo apt-get install python-sphinx) télécharger depuis pypi (https://pypi.python.org/pypi/sphinx) easy_install -U Sphinx pip install Sphinx non triviale scripts de préparation 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 docs sphinx -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

Outils génération de doc Sphinx Napoleon/Numpydoc Napoleon L extension Sphinx Napoleon: docstrings au format Google et Numpydoc https://pypi.python.org/pypi/sphinxcontrib-napoleon Numpydoc Numpydoc se base sur plusieurs extensions Sphinx pour gérer le format Numpydoc: https://pypi.python.org/pypi/numpydoc Adel Daouzli Docstrings - Python 28 / 30

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

Questions? Fin Merci pour votre attention... http://www.daouzli.com/blog/pyconfr-fr.html Adel Daouzli Docstrings - Python 30 / 30