[devtools/repotest] use the RepoAccess object
Quite better than playing tricks with the Repo._sessions.
Related to #1381328.
.. -*- coding: utf-8 -*-.. _tutorielGAE:Tutoriel : créer votre première application web pour Google AppEngine=====================================================================Ce tutoriel va vous guider pas à pas a construire une apllication web de gestion de Blog afin de vous faire découvrir les fonctionnalités de*CubicWeb*.Nous supposons que vous avec déjà suivi le guide :ref:`installationGAE`.Créez une nouvelle application------------------------------Nous choisissons dans ce tutoriel de développer un blog comme un exempled'application web et nous allons expliciter toutes les étapes nécessairesà sa réalisation. :: cubicweb-ctl newgapp blogdemo`newgapp` est la commande permettant de créer une instance *CubicWeb* pourle datastore.Assurez-vous que votre variable d'environnement ``PYTHONPATH`` est correctementinitialisée (:ref:`installationGAE`)Définissez un schéma--------------------Le modèle de données ou schéma est au coeur d'une application *CubicWeb*.C'est là où vous allez devoir définir le type de contenu que votre applicationdevra gérer.Commençons par un schéma simple que nous améliorerons progressivemment.Une fois votre instance ``blogdemo`` crée, vous trouverez un fichier ``schema.py``contenant la définition des entités suivantes : ``Blog`` and ``BlogEntry``.:: class Blog(EntityType): title = String(maxsize=50, required=True) description = String() class BlogEntry(EntityType): title = String(maxsize=100, required=True) publish_date = Date(default='TODAY') text = String(fulltextindexed=True) category = String(vocabulary=('important','business')) entry_of = SubjectRelation('Blog', cardinality='?*')Un ``Blog`` a un titre et une description. Le titre est une chaîne de caractères requise par la classe parente EntityType and ne doitpas excéder 50 caractères. La description est une chaîne de caractères sans contraintes.Une ``BlogEntry`` a un titre, une date de publication et du texteétant son contenu. Le titre est une chaîne de caractères qui ne doit pas excéder 100 caractères. La date de publication est de type Date et apour valeur par défaut TODAY, ce qui signifie que lorsqu'une ``BlogEntry`` sera créée, sa date de publication sera la datecourante a moins de modifier ce champ. Le texte est une chaîne decaractères qui sera indexée en plein texte et sans contraintes.Une ``BlogEntry`` a aussi une relation nommée ``entry_of`` qui larelie à un ``Blog``. La cardinalité ``?*`` signifie que BlogEntrypeut faire partie de zero a un Blog (``?`` signifie `zero ou un`) etqu'un Blog peut avoir une infinité de BlogEntry (``*`` signifie`n'importe quel nombre incluant zero`). Par soucis de complétude, nous rappellerons que ``+`` signifie`un ou plus`.Lancez l'application--------------------Définir ce simple schéma est suffisant pour commencer. Assurez-vous que vous avez suivi les étapes décrites dans la section installation(en particulier visitez http://localhost:8080/_load en tant qu'administrateurafin d'initialiser le datastore), puis lancez votre application avec la commande :: python dev_appserver.py BlogDemopuis dirigez vous vers http://localhost:8080/ (ou si c'est plus facilevous pouvez utiliser la démo en ligne http://lax.appspot.com/).[FIXME] -- changer la demo en ligne en quelque chose qui marche (!).. image:: images/lax-book.00-login.en.png :alt: login screenAprès vous être authentifié, vous arrivez sur la page d'accueil de votre application. Cette page liste les types d'entités accessibles dans votreapplication, en l'occurrence : Blog et Articles. Si vous lisez ``blog_plural``et ``blogentry_plural`` cela signifie que l'internationalisation (i18n)n'a pas encore fonctionné. Ignorez cela pour le moment... image:: images/lax-book.01-start.en.png :alt: home pageCréez des entités système-------------------------Vous ne pourrez créer de nouveaux utilisateurs que dans le cas où vousavez choisi de ne pas utiliser l'authentification Google.[WRITE ME : create users manages permissions etc]Créez des entités applicatives------------------------------Créez un Blog~~~~~~~~~~~~~Créons à présent quelques entités. Cliquez sur `[+]` sur ladroite du lien Blog. Appelez cette nouvelle entité Blog ``Tech-Blog``et tapez pour la description ``everything about technology``,puis validez le formulaire d'édition en cliquant sur le bouton``Validate``... image:: images/lax-book.02-create-blog.en.png :alt: from to create blogEn cliquant sur le logo situé dans le coin gauche de la fenêtre,vous allez être redirigé vers la page d'accueil. Ensuite, si vous allez sur le lien Blog, vous devriez voir la liste des entités Blog, en particuliercelui que vous venez juste de créer ``Tech-Blog``... image:: images/lax-book.03-list-one-blog.en.png :alt: displaying a list of a single blogSi vous cliquez sur ``Tech-Blog`` vous devriez obtenir une descriptiondétaillée, ce qui dans notre cas, n'est rien de plus que le titreet la phrase ``everything about technology``.. image:: images/lax-book.04-detail-one-blog.en.png :alt: displaying the detailed view of a blogMaintenant retournons sur la page d'accueil et créons un nouveauBlog ``MyLife`` et retournons sur la page d'accueil, puis suivonsle lien Blog et nous constatons qu'à présent deux blogs sont listés... image:: images/lax-book.05-list-two-blog.en.png :alt: displaying a list of two blogsCréons un article~~~~~~~~~~~~~~~~~Revenons sur la page d'accueil et cliquons sur `[+]` à droite du lien`articles`. Appellons cette nouvelle entité ``Hello World`` et introduisonsun peut de texte avant de ``Valider``. Vous venez d'ajouter un articlesans avoir précisé à quel Blog il appartenait. Dans la colonne de gauchese trouve une boite intitulé ``actions``, cliquez sur le menu ``modifier``.Vous êtes de retour sur le formulaire d'édition de l'article que vous venez de créer, à ceci près que ce formulaire a maintenant une nouvellesection intitulée ``ajouter relation``. Choisissez ``entry_of`` dans ce menu,cela va faire apparaitre une deuxième menu déroulant dans lequel vousallez pouvoir séléctionner le Blog ``MyLife``.Vous auriez pu aussi, au moment où vous avez crée votre article, sélectionner``appliquer`` au lieu de ``valider`` et le menu ``ajouter relation`` serait apparu... image:: images/lax-book.06-add-relation-entryof.en.png :alt: editing a blog entry to add a relation to a blogValidez vos modifications en cliquant sur ``Valider``. L'entité articlequi est listée contient maintenant un lien vers le Blog auquel il appartient, ``MyLife``... image:: images/lax-book.07-detail-one-blogentry.en.png :alt: displaying the detailed view of a blogentryRappelez-vous que pour le moment, tout a été géré par la plate-forme*CubicWeb* et que la seule chose qui a été fournie est le schéma dedonnées. D'ailleurs pour obtenir une vue graphique du schéma, exécutezla commande ``laxctl genschema blogdemo`` et vous pourrez visualiservotre schéma a l'URL suivante : http://localhost:8080/schema.. image:: images/lax-book.08-schema.en.png :alt: graphical view of the schema (aka data-model)Change view permission~~~~~~~~~~~~~~~~~~~~~~Conclusion----------Exercise~~~~~~~~Create new blog entries in ``Tech-blog``.What we learned~~~~~~~~~~~~~~~Creating a simple schema was enough to set up a new application thatcan store blogs and blog entries. What is next ?~~~~~~~~~~~~~~Although the application is fully functionnal, its look is verybasic. In the following section we will learn to create views tocustomize how data is displayed.