[test] update tests broken by changes on attributes permissions handling in yams (add/delete replaced by update
.. -*- coding: utf-8 -*-Introduction=============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 qui encaspule les résultats d'une requête adressée à 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 squelette depuis le répertoire``lax/skel`` vers un nouveau répertoire qui sera votre application``Google AppEngine``:: $ cp -r lax/skel 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 cubicweb.goa import dbUn exemple de schéma de données pour un ``Blog`` pourrait être:: from cubicweb.goa import db class Blog(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 de générer directement, à partir de la définitiondu schéma, des vues de consultation, d'ajout et de modificationpour tous les types de donées manipulés. Il est toutefoisgé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'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 ``Blog`` dansle fichier ``myapp/views.py``:: from cubicweb.web.views import baseviews class BlogPrimaryView(baseviews.PrimaryView): accepts = ('Blog',) 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``:: $ python tools/i18ncompile.py.. _`Google AppEngine` :: http://code.google.com/appengine/docs/datastore/overview.html