goa/doc/quickstart.txt
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 12 Nov 2009 17:15:07 +0100
branchstable
changeset 3830 3b6bbb3a3c3e
parent 0 b97547f5f1fa
child 2789 39712da6f397
permissions -rw-r--r--
close #472361: omit password and bytes attributes in allowed mass-mailing keys by fixing default implementation for allowed_massmail_keys() in the Emailable pluggable mixin (cw.common.mixins). Added test (in entities.test though), also fix CWUserTC classes conflicts in the test module.

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 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 cubicweb.goa import db


Un 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éfinition
du schéma, 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 ``Blog`` dans
le fichier ``myapp/views.py``::
  
  from cubicweb.web.views import baseviews
  
  class BlogPrimaryView(baseviews.PrimaryView):
      accepts = ('Blog',)
      
      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``::

  $ python tools/i18ncompile.py

.. _`Google AppEngine` :: http://code.google.com/appengine/docs/datastore/overview.html