L’idée que j’avais en tête était de fournir un CGI pour générer les images à partir des arguments passé dans une requête GET. J’ai opté pour une solution plus simple en ayant recours à Python avec son serveur SimpleHTTPServer.

Tout d’abord, il faut un squelette de script pour instancier une classe fille. La documentation nous donne un bon exemple et nous indique au passage que deux méthodes au minimum sont à redéfinir dans notre cas.

  • listing: squelette de script
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import SimpleHTTPServer, SocketServer
 
HOST, PORT = "", 8080
 
class LaTeXeqnHTTPServer(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        pass
 
    def do_HEAD(self):
        pass
 
if __name__ == '__main__':
    Handler = LaTeXeqnHTTPServer
    httpd = SocketServer.TCPServer((HOST, PORT), Handler)
    httpd.serve_forever()

La suite s’inspire très librement de celui de SimpleHTTPServer. À la base, ce serveur met à disposition les fichiers présents dans le répertoire dans lequel il est lancé; Ici une image est généré dans /tmp et renvoyée à la place. Il n’y a rien de bien particulier, mais si un jour vous avez besoin de faire un équivalent, ça peut se faire très rapidement en Python[1].

Le code est disponible ici: pyeqn.py.

Maintenant, deux petites remarques pratique.

Premièrement, je recréer une image à chaque requête ce qui est assez mauvais en termes de performances; Il n’y a pas besoin de s’en préoccuper et il suffit juste de placer un reverse-proxy pour mettre en cache les requêtes et s’épargner beaucoup de code.

Deuxièmement, il n’y a aucune ligne de programmation défensive. Pour cela aussi je ne m’en préoccupe pas plus que cela et je préfère utiliser d’autres méthodes pour me protéger[2].

Première partie

Notes

[1] même sans bien connaître le langage puisque je l’ai fait avec la documentation et Google à côté

[2] en ayant recours p. ex. à des sandboxes