[doc] Begin improvement of schema definition.
.. -*- 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 myapp
Définition du schéma
--------------------
Ouvrir le fichier ``myapp/schema.py`` afin de définir le schéma des
données manipulées. La syntaxe de la définition est la même que celle
proposée par `Google AppEngine` mais il faut remplacer la ligne
d'import::
from google.appengine.ext import db
par celle-ci::
from ginco.goa import db
Un 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éfinition
du schéma, de générer des vues de consultation, d'ajout et
de modification pour tous les types de donées manipulés.
Il est toutefois généralement souhaitable de personnaliser
les 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'applique
Il existe dans `LAX` des vues prédéfinies et utilisées par le moteur
d'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 la
page principale de consultation d'un objet.
Par exemple, si on souhaite modifier la page principale d'une entrée de
blog, il faut surcharger la vue ``primary`` des objets ``BlogEntry`` dans
le fichier ``myapp/views.py``::
from ginco.web.views import baseviews
class BlogEntryPrimaryView(baseviews.PrimaryView):
accepts = ('BlogEntry',)
def cell_call(self, row, col):
entity = self.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 graphique
représantant les différents types d'entités définis dans le schéma
ainsi que les relations entre ces types. Ce graphique doit être généré
statiquement. Le script à utiliser pour générer ce schéma est
dans ``myapp/tools``. Ce script nécessite d'avoir accès aux
bibliothèques fournies par le SDK de ``Google AppEngine``. Il faut
donc modifier son PYTHONPATH::
$ export PYTHONPATH=GAE_ROOT/google:GAE_ROOT/lib/yaml
$ python tools/generate_schema_img.py
Génération des fichiers de traduction
-------------------------------------
Des catalogues de traduction se trouvent dans `myapp/i18n`. Il faut
pour 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