Cog, l’anti langage de template Python | Sam & Max: Python, Django, Git et du cul

Cog, l’anti langage de template Python

Cog est un outil Python en ligne de commande qui permet d’insérer du code Python dans un fichier, afin qu’il génère une partie de ce fichier.

A priori, ça ressemble à un langage de template. Là où ça diffère, c’est que cog ne cherche pas à générer un fichier différent, il insère le code généré dans le fichier original, et garde le code de génération.

Exemple, vous avez envie d’insérer un warning en haut de plusieurs fichiers de code. Vos choix :

  • Copier-coller le warning.
  • Créer un script de build qui insère le warning.

L’alternative des bricoleurs qui ont juste besoin de quelques insertions, c’est Cog. Par exemple, votre fichier contient :

# [[[cog for l in open('warning.txt'): cog.out("# " + l) ]]]
# [[[end]]]

import vostrucs

vostrucs.faire_vos_machins()

Après un cog.py -r votre_fichier.py, votre fichier sera :

# [[[cog for l in open('warning.txt'): cog.out("# " + l) ]]]
# Attention, ceci est un avertissmement super important.
# Ce logiciel ne vient avec aucune garantie. Il vomira dans votre salon.
# Violera votre femme, lui collera l'hépatite C et offrira un CD de one direction
# à vos enfants.
# [[[end]]]

import vostrucs

vostrucs.faire_vos_machins()

cog vient avec plusieurs options, par exemple la possibilité de retirer le code de génération ou de lire le précédent texte généré depuis le code de génération.

La véritable force de l’outil c’est qu’il peut utiliser n’importe quel module Python, et donc générer du texte à partir d’un contenu en ligne ou un fichier CSV. Il est d’ailleurs né parce que l’auteur était codeur C et avait besoin de générer du code à partir d’un fichier XML.

Le seul défaut de Cog, c’est que c’est verbeux. Et moche.

  4 comments for “Cog, l’anti langage de template Python

  1. Roro
    27/01/2014 at 19:03

    Moi ce que j’aime bien chez Sam, ce sont les exemples…

  2. Sam
    28/01/2014 at 13:52

    Toujours tirés de cas réels, bien entendu.

  3. 28/01/2014 at 14:53

    Moi, j’aime bien aussi les images qui illustrent les articles !

    Sinon, c’est typiquement le genre de truc dont j’espère ne jamais avoir besoin. C’est vraiment crade.

  4. 30/01/2014 at 12:18

    A noter que cog a inspiré argument clinic un DSL pour gérer le parsing des arguments de fonction d’un module python codé en C. Il est utilisé en interne par python 3.4 et sera probablement disponible pour des modules externes quand il sera stabilisé.

Leave a Reply

Your email address will not be published. Required fields are marked *