# HG changeset patch # User Nicolas Chauvat # Date 1226539781 -3600 # Node ID d642f43eb87d757b3968462ce05402044ed8e311 # Parent 0adf4d507edefe3b0a525ce801efefdde06d5ed8 brutal hg mv diff -r 0adf4d507ede -r d642f43eb87d doc/argouml.log --- a/doc/argouml.log Thu Nov 13 02:14:41 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -2008-11-03 17:30:53,473 WARN: Unable to load configuration /home/adim/argo.user.properties (?:?) diff -r 0adf4d507ede -r d642f43eb87d doc/book/en/server-class-diagram.png Binary file doc/book/en/server-class-diagram.png has changed diff -r 0adf4d507ede -r d642f43eb87d doc/book/en/tut-create-app.en.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/en/tut-create-app.en.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,386 @@ +.. -*- coding: utf-8 -*- + + +Tutoriel : créer votre première application web pour Google AppEngine +===================================================================== + +[TRANSLATE ME TO FRENCH] + +This tutorial will guide you step by step to build a blog application +and discover the unique features of `LAX`. It assumes that you followed +the :ref:`installation` guidelines and that both the `AppEngine SDK` and the +`LAX` framework are setup on your computer. + +Creating a new application +-------------------------- + +We choosed in this tutorial to develop a blog as an example of web application +and will go through each required steps/actions to have it running with `LAX`. +When you installed `LAX`, you saw a directory named ``skel``. Make a copy of +this directory and call it ``BlogDemo``. + +The location of this directory does not matter. But once decided, make sure your ``PYTHONPATH`` is properly set (:ref:`installation`). + + +Defining a schema +----------------- + +With `LAX`, the schema/datamodel is the core of the application. This is where +you will define the type of content you have to hanlde in your application. + +Let us start with something simple and improve on it iteratively. + +In schema.py, we define two entities : ``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='?*') + +A Blog has a title and a description. The title is a string that is +required by the class EntityType and must be less than 50 characters. +The description is a string that is not constrained. + +A BlogEntry has a title, a publish_date and a text. The title is a +string that is required and must be less than 100 characters. The +publish_date is a Date with a default value of TODAY, meaning that +when a BlogEntry is created, its publish_date will be the current day +unless it is modified. The text is a string that will be indexed in +the full-text index and has no constraint. + +A BlogEntry also has a relationship ``entry_of`` that link it to a +Blog. The cardinality ``?*`` means that a BlogEntry can be part of +zero or one Blog (``?`` means `zero or one`) and that a Blog can +have any number of BlogEntry (``*`` means `any number including +zero`). For completeness, remember that ``+`` means `one or more`. + +Running the application +----------------------- + +Defining this simple schema is enough to get us started. Make sure you +followed the setup steps described in detail in the installation +chapter (especially visiting http://localhost:8080/_load as an +administrator), then launch the application with the command:: + + python dev_appserver.py BlogDemo + +and point your browser at http://localhost:8080/ (if it is easier for +you, use the on-line demo at http://lax.appspot.com/). + +.. image:: images/lax-book.00-login.en.png + :alt: login screen + +After you log in, you will see the home page of your application. It +lists the entity types: Blog and BlogEntry. If these links read +``blog_plural`` and ``blogentry_plural`` it is because +internationalization (i18n) is not working for you yet. Please ignore +this for now. + +.. image:: images/lax-book.01-start.en.png + :alt: home page + +Creating system entities +------------------------ +You can only create new users if you decided not to use google authentication. + + +[WRITE ME : create users manages permissions etc] + + + +Creating application entites +---------------------------- + +Create a Blog +~~~~~~~~~~~~~ + +Let us create a few of these entities. Click on the [+] at the right +of the link Blog. Call this new Blog ``Tech-blog`` and type in +``everything about technology`` as the description, then validate the +form by clicking on ``Validate``. + +.. image:: images/lax-book.02-create-blog.en.png + :alt: from to create blog + +Click on the logo at top left to get back to the home page, then +follow the Blog link that will list for you all the existing Blog. +You should be seeing a list with a single item ``Tech-blog`` you +just created. + +.. image:: images/lax-book.03-list-one-blog.en.png + :alt: displaying a list of a single blog + +Clicking on this item will get you to its detailed description except +that in this case, there is not much to display besides the name and +the phrase ``everything about technology``. + +.. image:: images/lax-book.04-detail-one-blog.en.png + :alt: displaying the detailed view of a blog + +Now get back to the home page by clicking on the top-left logo, then +create a new Blog called ``MyLife`` and get back to the home page +again to follow the Blog link for the second time. The list now +has two items. + +.. image:: images/lax-book.05-list-two-blog.en.png + :alt: displaying a list of two blogs + + +Create a BlogEntry +~~~~~~~~~~~~~~~~~~ + +Get back to the home page and click on [+] at the right of the link +BlogEntry. Call this new entry ``Hello World`` and type in some text +before clicking on ``Validate``. You added a new blog entry without +saying to what blog it belongs. There is a box on the left entitled +``actions``, click on the menu item ``modify``. You are back to the form +to edit the blog entry you just created, except that the form now has +another section with a combobox titled ``add relation``. Chose +``entry_of`` in this menu and a second combobox appears where you pick +``MyLife``. + +You could also have, at the time you started to fill the form for a +new entity BlogEntry, hit ``Apply`` instead of ``Validate`` and the +combobox titled ``add relation`` would have showed up. + +.. image:: images/lax-book.06-add-relation-entryof.en.png + :alt: editing a blog entry to add a relation to a blog + +Validate the changes by clicking ``Validate``. The entity BlogEntry +that is displayed now includes a link to the entity Blog named +``MyLife``. + +.. image:: images/lax-book.07-detail-one-blogentry.en.png + :alt: displaying the detailed view of a blogentry + +Remember that all of this was handled by the framework and that the +only input that was provided so far is the schema. To get a graphical +view of the schema, run the ``laxctl genschema BlogDemo`` command as +explained in the installation section and point your browser to the +URL http://localhost:8080/schema + +.. image:: images/lax-book.08-schema.en.png + :alt: graphical view of the schema (aka data-model) + +Site configuration +------------------ + +.. image:: images/lax-book.03-site-config-panel.en.png + +This panel allows you to configure the appearance of your application site. +Six menus are available and we will go through each of them to explain how +to use them. + +Navigation +~~~~~~~~~~ +This menu provides you a way to adjust some navigation options depending on +your needs, such as the number of entities to display by page of results. +Follows the detailled list of available options : + +* navigation.combobox-limit : maximum number of entities to display in related + combo box (sample format: 23) +* navigation.page-size : maximum number of objects displayed by page of results + (sample format: 23) +* navigation.related-limit : maximum number of related entities to display in + the primary view (sample format: 23) +* navigation.short-line-size : maximum number of characters in short description + (sample format: 23) + +UI +~~ +This menu provides you a way to customize the user interface settings such as +date format or encoding in the produced html. +Follows the detailled list of available options : + +* ui.date-format : how to format date in the ui ("man strftime" for format description) +* ui.datetime-format : how to format date and time in the ui ("man strftime" for format + description) +* ui.default-text-format : default text format for rich text fields. +* ui.encoding : user interface encoding +* ui.fckeditor :should html fields being edited using fckeditor (a HTML WYSIWYG editor). + You should also select text/html as default text format to actually get fckeditor. +* ui.float-format : how to format float numbers in the ui +* ui.language : language of the user interface +* ui.main-template : id of main template used to render pages +* ui.site-title : site title, which is displayed right next to the logo in the header +* ui.time-format : how to format time in the ui ("man strftime" for format description) + + +Actions +~~~~~~~ +This menu provides a way to configure the context in which you expect the actions +to be displayed to the user and if you want the action to be visible or not. +You must have notice that when you view a list of entities, an action box is +available on the left column which display some actions as well as a drop-down +menu for more actions. + +The context available are : + +* mainactions : actions listed in the left box +* moreactions : actions listed in the `more` menu of the left box +* addrelated : add actions listed in the left box +* useractions : actions listed in the first section of drop-down menu + accessible from the right corner user login link +* siteactions : actions listed in the second section of drop-down menu + accessible from the right corner user login link +* hidden : select this to hide the specific action + +Boxes +~~~~~ +The application has already a pre-defined set of boxes you can use right away. +This configuration section allows you to place those boxes where you want in the +application interface to customize it. + +The available boxes are : + +* actions box : box listing the applicable actions on the displayed data + +* boxes_blog_archives_box : box listing the blog archives + +* possible views box : box listing the possible views for the displayed data + +* rss box : RSS icon to get displayed data as a RSS thread + +* search box : search box + +* startup views box : box listing the configuration options available for + the application site, such as `Preferences` and `Site Configuration` + +Components +~~~~~~~~~~ +[WRITE ME] + +Contextual components +~~~~~~~~~~~~~~~~~~~~~ +[WRITE ME] + +Set-up a workflow +----------------- + +Before starting, make sure you refresh your mind by reading [link to +definition_workflow chapter]. + +We want to create a workflow to control the quality of the BlogEntry +submitted on your application. When a BlogEntry is created by a user +its state should be `submitted`. To be visible to all, it needs to +be in the state `published`. To move from `submitted` to `published` +we need a transition that we can name `approve_blogentry`. + +We do not want every user to be allowed to change the state of a +BlogEntry. We need to define a group of user, `moderators`, and +this group will have appropriate permissions to approve BlogEntry +to be published and visible to all. + +There are two ways to create a workflow, form the user interface, +and also by defining it in ``migration/postcreate.py``. This script +is executed each time a new ``./bin/laxctl db-init`` is done. +If you create the states and transitions through the user interface +this means that next time you will need to initialize the database +you will have to re-create all the entities. +We strongly recommand you create the workflow in ``migration\postcreate.py`` +and we will now show you how. +The user interface would only be a reference for you to view the states +and transitions but is not the appropriate interface to define your +application workflow. + +Update the schema +~~~~~~~~~~~~~~~~~ +To enable a BlogEntry to have a State, we have to define a relation +``in_state`` in the schema of BlogEntry. Please do as follows, add +the line ``in_state (...)``:: + + class BlogEntry(EntityType): + title = String(maxsize=100, required=True) + publish_date = Date(default='TODAY') + text_format = String(meta=True, internationalizable=True, maxsize=50, + default='text/rest', constraints=[format_constraint]) + text = String(fulltextindexed=True) + category = String(vocabulary=('important','business')) + entry_of = SubjectRelation('Blog', cardinality='?*') + in_state = SubjectRelation('State', cardinality='1*') + +As you updated the schema, you will have re-execute ``./bin/laxctl db-init`` +to initialize the database and migrate your existing entities. +[WRITE ABOUT MIGRATION] + +Create states, transitions and group permissions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +At the time the ``postcreate.py`` script is executed, several methods +can be used. They are all defined in the ``class ServerMigrationHelper``. +We will only discuss the method we use to create a wrokflow here. + +To define our workflow for BlogDemo, please add the following lines +to ``migration/postcreate.py``:: + + _ = unicode + + moderators = add_entity('EGroup', name=u"moderators") + + submitted = add_state(_('submitted'), 'BlogEntry', initial=True) + published = add_state(_('published'), 'BlogEntry') + + add_transition(_('approve_blogentry'), 'BlogEntry', (submitted,), published, ('moderators', 'managers'),) + + checkpoint() + +``add_entity`` is used here to define the new group of users that we +need to define the transitions, `moderators`. +If this group required by the transition is not defined before the +transition is created, it will not create the relation `transition +require the group moderator`. + +``add_state`` expects as the first argument the name of the state you are +willing to create, then the entity type on which the state can be applied, +and an optionnal argument to set if the state is the initial state +of the entity type or not. + +``add_transition`` expects as the first argument the name of the +transition, then the entity type on which we can apply the transition, +then the list of possible initial states from which the transition +can be applied, the target state of the transition, and the permissions +(e.g. list of the groups of users who can apply the transition). + +.. image:: images/lax-book.03-transitions-view.en.png + +You can now notice that in the actions box of a BlogEntry, the state +is now listed as well as the possible transitions from this state +defined by the workflow. This transition, as defined in the workflow, +will only being displayed for the users belonging to the group +moderators of managers. + +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 that +can store blogs and blog entries. + +What is next ? +~~~~~~~~~~~~~~ + +Although the application is fully functionnal, its look is very +basic. In the following section we will learn to create views to +customize how data is displayed. + + diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/01-intro.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/01-intro.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,127 @@ +.. -*- 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'

%s

' % entity.title) + self.w(u'
%s
' 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 + diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/02-install.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/02-install.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,77 @@ +.. -*- coding: utf-8 -*- + +Installation de `LAX` +===================== + +Qu'est-ce que `LAX` ? +======================= + +`LAX` (Logilab Appengine eXtension) est un framework d'application +web basé sur `Google AppEngine`. + +`LAX` est un portage de la partie web de la plate-forme applicative +développée par Logilab depuis 2001. Cette plate-forme publie des +données tirées de bases SQL, d'annuaires LDAP et de systèmes de +gestion de version. En avril 2008, elle a été portée pour fonctionner +sur le "datastore" de `Google AppEngine`. + +XXX: faire un parallèle entre Django/GAE et LAX/GAE + + +Téléchargement des sources +========================== + +- Les sources de `Google AppEngine` peuvent être récupérées à l'adresse + suivante : http://code.google.com/appengine/downloads.html + +- Les sources de `LAX` se trouvent à l'adresse suivante : + http://lax.logilab.org/ + + +Installation +============ + +Une fois décompactée, l'archive `lax-0.1.0-alpha.tar.gz`, on obtient +l'arborescence suivante:: + + . + |-- app.yaml + |-- custom.py + |-- data + |-- ginco/ + |-- i18n/ + |-- logilab/ + |-- main.py + |-- mx/ + |-- rql/ + |-- schema.py + |-- simplejson/ + |-- tools/ + | |-- generate_schema_img.py + | `-- i18ncompile.py + |-- views.py + |-- yams/ + `-- yapps/ + + +On retrouve le squelette d'une application web de `Google AppEngine` +(fichiers ``app.yaml``, ``main.py`` en particulier) avec les dépendances +supplémentaires nécessaires à l'utilisation du framework `LAX` + + +Lancement de l'application de base +================================== + +Plusieurs répertoires doivent être accessibles via la variable +d'environnement ``PYTHONPATH`` :: + + $ export PYTHONPATH=/path/to/google_appengine:/path/to/google_appengine/lib/yaml/lib:/path/to/myapp/ + +Le répertoire yaml n'est nécessaire que pour le lancement des scripts +qui se trouvent dans lax/tools et pour l'exécution des tests unitaires. + +Pour démarrer:: + + $ python /path/to/google_appengine/dev_appserver.py /path/to/lax + + diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/03-create-app.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/03-create-app.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,6 @@ +.. -*- coding: utf-8 -*- + +Créer une application simple +============================ + +[TRADUISEZ-MOI] diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/04-develop-views.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/04-develop-views.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,103 @@ +.. -*- coding: utf-8 -*- + +Définir l'interface utilisateur avec des vues +============================================= + +`LAX` provides out-of-the-box a web interface that is generated from +the schema definition: entities can be created, displayed, updated and +deleted. As display views are not very fancy, it is usually necessary +to develop your own. + + +With `LAX`, views are defined by Python classes. A view includes : + +- an identifier (all objects in `LAX` are entered in a registry + and this identifier will be used as a key) + +- a filter to select the resulsets it can be applied to + +`LAX` provides a lot of standard views, for a complete list, you +will have to read the code in directory views (XXX improve doc). +For example, the view named ``primary`` is the one used to display +a single entity. + +If you want to change the way a ``BlogEntry`` is displayed, just +override the view ``primary`` in ``BlogDemo/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'

%s

' % entity.title) + self.w(u'
%s
' % entity.publish_date) + self.w(u'
%s
' % entity.category) + self.w(u'
%s
' entity.content) + +[WRITE ME] + +* Defining views with selection/views + +* implementing interfaces, calendar for blog entries + +* show that a calendar view can export data to ical + +* create view "blogentry table" with title, publish_date, category + +* in view blog, select blogentries and apply view "blogentry table" + +* demo ajax by filtering blogentry table on category + +Components +=========== + +[WRITE ME] + +* explain the component architecture + +* add comments to the blog by importing the comments component + +MainTemplate +============ + +[WRITE ME] + +* customize MainTemplate and show that everything in the user + interface can be changed + + +RSS Channel +=========== + +[WRITE ME] + +* show that the RSS view can be used to display an ordered selection + of blog entries, thus providing a RSS channel + +* show that a different selection (by category) means a different channel + +RQL +==== + +[WRITE ME] + +* talk about the Relation Query Language + +URL Rewriting +============= + +[WRITE ME] + +* show how urls are mapped to selections and views and explain URLRewriting + +Security +========= + +[WRITE ME] + +* talk about security access rights and show that security is defined + using RQL + diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/05-components.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/05-components.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,7 @@ +.. -*- coding: utf-8 -*- + + +Composants +=========== + +[TRADUISEZ-MOI] diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/06-maintemplate.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/06-maintemplate.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,6 @@ +.. -*- coding: utf-8 -*- + +MainTemplate +============ + +[TRADUISEZ-MOI] diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/07-rss-xml.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/07-rss-xml.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,7 @@ +.. -*- coding: utf-8 -*- + + +Canaux RSS et exports XML +========================= + +[TRADUISEZ-MOI] diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/08-rql.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/08-rql.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,6 @@ +.. -*- coding: utf-8 -*- + +RQL +=== + +[TRADUISEZ-MOI] diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/09-urlrewrite.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/09-urlrewrite.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,8 @@ +.. -*- coding: utf-8 -*- + +Ré-écriture d'URLs +================== + +[TRANSLATE ME] + + diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/10-security.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/10-security.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,7 @@ +.. -*- coding: utf-8 -*- + +Securité +========= + +[TRADUISEZ-MOI] + diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/11-faq.fr.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/11-faq.fr.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,6 @@ +.. -*- coding: utf-8 -*- + +LAX Foire Aux Questions +======================= + +[TRADUISEZ-MOI] \ No newline at end of file diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/advanced_notes.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/advanced_notes.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,6 @@ +.. -*- coding: utf-8 -*- + +La différence entre la classe `AppRsetObject` et la classe `AppObject` est que +les instances de la premières sont séléctionnées pour une requête et un "result +set" et alors que les secondes ne sont séléctionnées qu'en fonction de leur +identifiant. diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/chap_addons.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/chap_addons.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,17 @@ +.. -*- coding: utf-8 -*- + +.. _contents: + +========== +References +========== + +.. toctree:: + :maxdepth: 1 + + chap_rql.txt + chap_migration.txt + chap_tests.txt + chap_i18n.txt + + diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/chap_autres_composants_ui.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/chap_autres_composants_ui.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,14 @@ +Autres composants de l'interface web +==================================== + +Actions +------- +XXXFILLME + +Component, VComponent +--------------------- +XXXFILLME + +EProperty +--------- +XXXFILLME diff -r 0adf4d507ede -r d642f43eb87d doc/book/fr/chap_configuration_instance.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/book/fr/chap_configuration_instance.txt Thu Nov 13 02:29:41 2008 +0100 @@ -0,0 +1,162 @@ +.. -*- coding: utf-8 -*- + +Configuration d'une instance +============================ + +À la création d'une instance, un fichier de configuration est généré dans :: + + $(CW_REGISTRY)//.conf + +par exemple :: + + /etc/cubicweb.d/jpl/all-in-one.conf + +C'est un simple fichier texte au format INI. Dans la description suivante, +chaque nom d'option est préfixé de sa section et suivi de sa valeur par défaut +le cas échéant, e.g. "`
.