Licence CC BY

Nouvelle expérience : On continue à coder en live !

Samedi à 14h a eu lieu le premier livestream de code de zds. Comme je l’ai dit dans les commentaires j’envisage d’en faire un pour implémenter une nouvelle fonctionnalité de zds le 2 août. Mais en attendant, pour m’entraîner et voir le temps que peut prendre ce genre d’activité, je vous propose un nouveau refactoring.

En rapide, un nouveau stream se prépare ici vendredi 21 à 20h

Il était une fois un pdf

L’enjeu du refactoring : permettre à Zeste De Savoir de profiter à nouveau d’un export PDF propre et efficace.

Pour cela je vais prendre la suite du travail réalisé ici. Et je ferai évoluer le code de zds pour que lorsqu’on publie ou appelle à zmarkdown pour :

  • générer le fichier html stand alone
  • générer le fichier epub
  • générer un export .tex
  • et en déduire le pdf qui va bien.

L’enjeu sera d’avoir un code plus propre (la publication a un historique complexe et n’est pas le code le plus facile à comprendre du site – oui, j’aime les euphémismes.), qui se passe de pandoc et qui fonctionne.

ça veut dire quoi "fonctionner"?

  • quand un export réussi, il devient pleinement accessible, un flag est passé pour dire que c’est ok;
  • un un export rate, le flag est passé à "échec", une erreur correctement formatée est envoyée à sentry pour qu’on la traite comme il faut, et surtout le reste n’est pas bloqué.

un peu d'info sur la publication

Comme je le disais, le module de publication n’est pas le plus facile à comprendre. Je vous propose ce petit extrait pour avoir une "vue de loin" de comment ça marche.

Pipeline

Actuellement, Pandoc gère toutes les publications grâce à ce code, par exemple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@PublicatorRegistery.register('pdf', settings.PANDOC_LOC, 'pdf', settings.PANDOC_PDF_PARAM)
@PublicatorRegistery.register('epub', settings.PANDOC_LOC, 'epub')
@PublicatorRegistery.register('html', settings.PANDOC_LOC, 'html')
class PandocPublicator(Publicator):

    """
    Wrapper arround pandoc commands
    """
    def __init__(self, pandoc_loc, _format, pandoc_pdf_param=None):
        self.pandoc_loc = pandoc_loc
        self.pandoc_pdf_param = pandoc_pdf_param
        self.format = _format
        self.__logger = logging.getLogger('zds.pandoc-publicator')

    def publish(self, md_file_path, base_name, change_dir='.', pandoc_debug_str='', **kwargs):
        """

        :param md_file_path: base markdown file path
        :param base_name: file name without extension
        :param change_dir: directory in wich pandoc commands will be executed
        :param pandoc_debug_str: end of command to allow debugging
        :param kwargs: othe publicator dependant options ignored by this one
        :return:
        """
        if self.pandoc_pdf_param:
            self.__logger.debug('Started {} generation'.format(base_name + '.' + self.format))
            subprocess.call(
                self.pandoc_loc + 'pandoc ' + self.pandoc_pdf_param + ' ' + md_file_path + ' -o ' +
                base_name + '.' + self.format + ' ' + pandoc_debug_str,
                shell=True,
                cwd=change_dir)
            self.__logger.info('Finished {} generation'.format(base_name + '.' + self.format))
        else:
            self.__logger.debug('Started {} generation'.format(base_name + '.' + self.format))
            subprocess.call(
                self.pandoc_loc + 'pandoc -s -S --toc ' + md_file_path + ' -o ' +
                base_name + '.' + self.format + ' ' + pandoc_debug_str,
                shell=True,
                cwd=change_dir)
            self.__logger.info('Finished {} generation'.format(base_name + '.' + self.format))

`

et la date

Vendredi 21 juillet à 20h heure Française.


35 commentaires

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte