Fonctionnement des actions
==========================

Le frontend reçoit la description des actions depuis le backend via get_menu.
Le frontend commande l'exécution de l'action au backend, reçoit un retour et l'affiche.

Exécution d'une action
----------------------

Une action, pour être exécutée, doit recevoir tout ses paramètres de la part
du frontend. Cette exécution s'effectue avec un magic_number.

Retour d'une exécution
----------------------

le backend renvoie un dictionnaire

::

        d = {'template':'lshw', 'data':{'content':result, 'templates':['main', 'form', 'formselect']}}

la clé template, correspond à un template cheetah, la clé templates renvoie la liste des widgets utilisés dans 
le template.
qui permet la mise en forme du résultat. La variable result donnant les données
à mettre en forme.
Le template est téléchargé auprès du serveur xmlrpc

Templatisation
==============

Arborescence
------------

- sur le serveur de commandes, le répetoire des templates est ROOT_DIR/ead2/backend/template
- sur le serveur de l'application web, le répertoire des templates est ROOT_DIR/ead2/frontend/web/template
- sur le serveur de l'application web, gabarit.py est chargé de la gestion des templates.

Execution
---------

1/ L'action est exécutée par l'agrégateur:
	ead_server.execute_action(action_name, params, magic_number)
2/ L'agrégateur reçoit un dictionnaire en retour:
	{'template':nomdutemplate, 'datas':{'content':données de mise en forme}}
3/ L'agrégateur teste la présence du template `nomdutemplate` et le télécharge si besoin.
4/ Il instancie le template avec les données de mise en forme.
5/ Il passe les données à l'interface en réponse à la requête client (ajax ou html).

Extension
---------

Il est possible de faire hériter des templates, dans ce cas le template parent est téléchargé et
compilé avant l'instanciation du template principal (l'enfant).
dans le template enfant:

::
	
	%extends ead2.frontend.web.template.nomparent

Le nom du template parent est spécifié dans le dictionnaire venant du serveur de commande.

::

     {'template':nomdutemplate, 'datas':{'content':données de mise en forme, 'templates':[nomdutemplateparent]}}

Ecriture de template et passage de données
------------------------------------------

Dans l'ead2, le template ne reçoit que des variables, seul la structure du template est parfois
spécifique à l'action associée sinon, autant que faire se peut, les données du template sont fournies
par le biais de variable passé dans la clé content.

La structure de template
------------------------

Pour l'écriture des templates, un système de widget est implémenté, il permet:

::

	- d'utiliser une trame, donc une cohérence structurelle de la mise en page peut être entretenue.
	- de widgetiser des outils particulier afin de les réutiliser. La modification sera d'autant plus simple.
