.. -*- coding: utf-8 -*-Introduction à `LAX`====================Concepts et vocabulaire-----------------------*schéma* le schéma définit le modèle de données d'une application sous forme d'entités et de relations. C'est l'élément central d'une application.*result set* objet encaspulant les résultats d'une requête à l'entrepôt de données et des informations sur cette requête.*vue* une vue est une manière de représenter les données d'un `result set` sous forme HTML, CSV, JSON, etc.Définition d'une application de Blog====================================La première chose à faire est de copier le répertoire ``lax``vers un nouveau répertoire qui sera votre application ``Google AppEngine``:: $ cp -r lax myappDéfinition du schéma--------------------Ouvrir le fichier ``myapp/schema.py`` afin de définir le schéma desdonnées manipulées. La syntaxe de la définition est la même que celleproposée par `Google AppEngine` mais il faut remplacer la ligned'import:: from google.appengine.ext import dbpar celle-ci:: from ginco.goa import dbUn exemple de schéma de données pour un ``Blog`` pourrait être:: from ginco.goa import db class BlogEntry(db.Model): # un titre à donner à l'entrée title = db.StringProperty(required=True) # la date à laquelle le blog est créé diem = db.DateProperty(required=True, auto_now_add=True) # le contenu de l'entrée content = db.TextProperty() # une entrée peut en citer une autre cites = db.SelfReferenceProperty()Personnalisation des vues-------------------------`LAX` permet d'obtenir directement, à partir de la définitiondu schéma, de générer des vues de consultation, d'ajout etde modification pour tous les types de donées manipulés.Il est toutefois généralement souhaitable de personnaliserles vues de consultations.Dans `LAX`, les vues sont représentées par des classes Python.Une vue se caractèrise par :- un identifiant (tous les objets dans `LAX` sont enregistrés dans un registre et cet identifiant sert de clé pour y retrouver la vue)- une description des types de données auxquels elle s'appliqueIl existe dans `LAX` des vues prédéfinies et utilisées par le moteurd'affichage. Pour avoir une liste exhaustive de ces vues prédéfinies,vous pouvez consulter cette page. (XXX mettre le lien vers la liste).Par exemple, la vue ``primary`` est la vue utilisée pour générer lapage principale de consultation d'un objet.Par exemple, si on souhaite modifier la page principale d'une entrée deblog, il faut surcharger la vue ``primary`` des objets ``BlogEntry`` dansle fichier ``myapp/views.py``:: from ginco.web.views import baseviews class BlogEntryPrimaryView(baseviews.PrimaryView): accepts = ('BlogEntry',) def cell_call(self, row, col): entity = self.rset.get_entity(row, col) self.w(u'<h1>%s</h1>' % entity.title) self.w(u'<div>%s</div>' entity.content)Génération du graphique de schéma---------------------------------Il existe une vue ``schema`` qui permet d'afficher un graphiquereprésantant les différents types d'entités définis dans le schémaainsi que les relations entre ces types. Ce graphique doit être généréstatiquement. Le script à utiliser pour générer ce schéma estdans ``myapp/tools``. Ce script nécessite d'avoir accès auxbibliothèques fournies par le SDK de ``Google AppEngine``. Il fautdonc modifier son PYTHONPATH:: $ export PYTHONPATH=GAE_ROOT/google:GAE_ROOT/lib/yaml $ python tools/generate_schema_img.pyGénération des fichiers de traduction-------------------------------------Des catalogues de traduction se trouvent dans `myapp/i18n`. Il fautpour l'instant les mettre à jour à la main (et/ou avec les outils``GNU`` comme ``xgettext``) et ensuite les compiler grâce au script``myapp/tools/i18ncompile.py``:: $ export PYTHONPATH=GAE_ROOT/google:GAE_ROOT/lib/yaml $ python tools/i18ncompile.py