Eole Documentation: Le frontend

# Le frontend

Le squelette Woven

Le design est stocké dans des templates woven. La maquette html `design.xhtml` est stockée dans le répertoire `template`, ainsi que la page woven de design (`design.py`). Toutes les pages de l'appliquation doivent donc hériter de la classe Design, qui elle hérite de twisted.web.woven.page.Page

Dans le fichier `design.py`, il y a aussi des méthodes intermédiaire faisant appel au backend pour effectuer des traitements avant formatage des données.

## Description d'une page

    class UnePage(Design):
        """Exemple de page
        """
        isLeaf = True

        def getChild(self, name, request):
            if static.isDangerous(name):
                return static.dangerousPathError
            if name == "nom_de_page" :
                return self
         # classe "répertoire", conteneur
            return Conteneur()

        def wmfactory_title(self,request):
            return "Titre de la page"

        def wmfactory_content(self, request):
            return self.content

        def _dump_html(self,liste):
            """Pour le formatage html des données
            """

        def renderView(self, request):
            """Récupération du modèle et traitements
            """
     # tests des request.args
     # appels aux backend
            return view.View.render(self,
            request,doneCallback=self.gatheredControllers)

## Les arguments de formulaire

La récupération des arguments de formulaires s'accompagne en cas d'échec d'une levée d'exception FrontendError. Ensuite, les arguments de la requète sont testés (typiquement, un assert pour vérifier que les chaines ne sont pas vides).

    try:
        id = request.args['id'][0]
        assert id
    except:
        raise FrontendError("identifiant")

## Les appels au backend

L'objet xmlrpc du backend est self.zephir. Il est récupéré puis formaté. La récupération des données du backend s'accompagne en cas d'échec d'une levée d'exception de type BackendErrror ou bien DatabaseError.

    try:
        resultat = backend(self.zephir.modules.get_module(int(id)))
        module = resultat[0]
        self.content = self._dump_html(module['id'],module['libelle'])
    except:
        raise BackendError

## Récupération des exceptions

Au final, les exception sont récupérée et les messages d'erreur affichés via la variable self.content.

    try:
        # éventuelle levée des exceptions
    except (FrontendError, BackendError), e:
        self.content = e

Les messages d'exception peuvent s'accumuler. Voici un exemple de récupération de l'erreur provenant de la base, tout en générant une erreur backend :

    try:
        backend(self.zephir.modules.del_module(int(id)))
        self.content = """
        Le module %s a bien été supprimé
        Liste des modules
        """        % id
    except DatabaseError, e:
        raise BackendError("Veuillez vérifier si le module que vous voulez
        supprimer n'est pas en cours d'utilisation." + str(e))
    except :
        raise BackendError

Index

mar mar 23 09:10:33 CET 2004 Version: 0.7