Rédiger ses billets avec classe

Zinnia offre la possibilité d'écrire des billets avec autre chose que de l'HTML. Il supporte plusieurs languages (parce que Django le vaut bien) comme, par exemple, le ReStructuredText.

Certains se demanderont peut-être quel est l'intérêt d'utiliser une syntaxe aussi archaique. D'un point de vue tout à fait personnel, j'en vois plusieurs :

  • Comme tout bon pythonista qui se respecte, j'écris de la documentation en utilisant cette syntaxe. Ce qui est cool en faisant cela, c'est que je peux par la suite utiliser Sphinx pour générer de la belle documentation,
  • C'est lisible, le formatage est efficace et bien organisé,
  • C'est facile à retenir.

Bref, je ne cherche pas à convaincre qui que ce soit, plutôt à combler un manque du côté de Zinnia car ce dernier ne propose pas d'outil de migration. Prenez l'exemple suivant (qui est celui de ce site) :

  • Changement d'outil,
  • Une base existante rédigée en HTML,
  • Un besoin d'homogéinité (utiliser une seule et même syntaxe pour mes travaux de rédaction).

C'est classique et je ne pense pas être le seul dans ce cas de figure.

En cherchant un peu, je suis tombé sur Pandoc, une sorte de couteau suisse de la conversion entre formats. J'ai même poussé le vice jusqu'à chercher un module python parce que je suis un gros paresseux :p

En combinant ces outils avec une analyse rapide des modèles utilisés par Zinnia, le résultat obtenu est le suivant :

#!/usr/bin/env python
# coding: utf-8

from django.conf import settings
from zinnia.models import Entry
import pandoc

pandoc.core.PANDOC_PATH = "/usr/bin/pandoc"

def migrate():
    for e in Entry.objects.all():
        print "Converting '%s'..." % e.title
        doc = pandoc.Document()
        doc.html = e.content
        e.content = doc.rst
        e.save()

if __name__ == "__main__":
    migrate()

C'est court et, le plus important, cela fonctionne... presque toujours.

Le module python en question n'est pas très bien écrit et il utilise mal le module subprocess. Le risque : un blocage potentiel en cours d'exécution.

Bref, il a au moins le mérite d'exister :-)

0 commentaires

Aucun commentaire!

Postez votre commentaire