Développement d’une
plateforme web avec CherryPy
Marie-Josée Cros
INRA Toulouse
cros@toulouse.inra.fr
Introduction
Volonté de développer une plateforme web pour proposer un environnement intégré dans lequel un biologiste pourrait lancer plusieurs programmes, explorer, éditer et exporter les résultats obtenus :
pas d’installation de logiciels à faire
puissance de la combinaison d’outils disparates
Plusieurs équipes partantes (compétences, localisations différentes), volonté d’ouverture
Après discussion et spécification de ce que l’on pourrait réaliser, il y a 1 an, des choix techniques ont été fait :
Python pour le langage de développement
CherryPy complété par Cheetah (template engine) pour le web
Pourquoi ces choix
Qualités du langage : simplicité syntaxe, interprété …
Beaucoup de bibliothèques disponibles
Impression langage de plus en plus utilisé : intérêt pour le connaître
Permettait de développer les parties web et applications dans le même langage
Simplicité, proximité avec Python
Intégration d’un serveur HTTP
Possibilité d’ajout d’un langage de rendu
Syntaxe simple, proche de Python
Possibilité de compiler les templates
Très utilisé, communauté active
CherryPy (cherrypy.org)
Framework HTTP, orienté objet, pythonic
Compatible WSGI
Peut fonctionner avec différents langages de rendu
Créé en 2002, en 2005 intégré à TurboGears, fin 2006 version 3.0, actuellement version 3.1.2
Le serveur HTTP fournit permet aux applications d'être déployées n'importe où Python est installé
Permet d’écrire des applications web de la même manière qu’une application Python classique : fait correspondre une URL et sa requête en un appel de méthode
http://host.net/echo?message="hello" -> echo(message= "hello")
Un ensemble de modules pour authentification, encoding, session
…
hello.py
import cherrypy class HelloWorld:
def index(self):
return ‘Hello world !’
index.exposed = True
cherrypy.quickstart(HelloWorld()) python2.5 hello.py
CherryPy - exemple
Lancement du serveur web intégré
avec mapping de ‘/’ sur HelloWorld.index() Pour que la méthode soit
appelable, il faut la publier
Configuration possible du serveur par fichier server.socket_port = 8080
Permet de séparer le contenu de la présentation
Exemple <html>
<head><title>$title</title></head>
<body>
<table>
#for $client in $clients <tr>
<td>$client.surname, $client.firstname</td>
<td><a href="mailto:$client.email">$client.email</a></td>
</tr>
#end for </table>
</body>
</html>
Cheetah
rnaspace.org – workflow utilisateur
B I O
L O G I S T E
P L A T E F O R M E D E C A L C U L
Conclusion
Python : gens motivés pour se mettre au langage, se prête bien à du travail collaboratif, difficulté à trouver des méthodes quand on ne sait pas dans quelle bibliothèque les chercher)
CherryPy : pour le moment on apprécie les caractéristiques pour lesquelles on l'a choisi
Des problèmes récents de gestion de mémoire vive résolus
Interrogation sur CherryPy en mode production (charge, sécurité …)
Interrogation sur la structure du logiciel, on a défini une
architecture 3-tiers en utilisant le modèle MVC pour la partie
interface (sourceforge.net/projects/rnaspace) mais un framework plus complet nous aurait peut-être aidé à la définir