goa/doc/quickstart.txt
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Thu, 15 Jul 2010 12:03:13 +0200
branchstable
changeset 5976 00b1b6b906cf
parent 2789 39712da6f397
permissions -rw-r--r--
[transaction] if error on rollbacking a source, replace the connection by a new one

.. -*- 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 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.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 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