doc/book/en/02-00-foundation.en.txt
author Nicolas Chauvat <nicolas.chauvat@logilab.fr>
Thu, 20 Nov 2008 21:55:16 +0100
changeset 116 e2303f9b5bfa
parent 113 1091d8d63f51
child 118 fae5651e7593
permissions -rw-r--r--
[doc] more merging and reorg
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
     1
.. -*- coding: utf-8 -*-
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
     2
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
     3
`CubicWeb` concepts
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
     4
===================
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
     5
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
     6
A little history...
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
     7
-------------------
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
     8
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
     9
`CubicWeb` is a web application framework developped by Logilab_ since 2001.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    10
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    11
Entirely written in Python, `CubicWeb` publishes data from all sorts
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    12
of sources such as SQL database, LDAP directory and versioning system such
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    13
as subversion.
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    14
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    15
`CubicWeb` user interface was designed to let the final user a huge flexibility
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    16
on how to select and how to display content. It allows to browse the knowledge
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    17
database and to display the results with the best rendering according to
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    18
the context.
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    19
This interface flexibility gives back the user the control of the 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    20
rendering parameters that are usually reserved for developpers.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    21
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    22
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    23
We can list a couple of web applications developped with `CubicWeb`, an online
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    24
public phone directory (see http://www.118000.fr/), a system for managing 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    25
digital studies and simulations for a research lab, a tool for shared children
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    26
babysitting (see http://garde-partagee.atoukontact.fr/), a tool to manage
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    27
software developpment (see http://www.logilab.org), etc.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    28
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    29
In 2008, `CubicWeb` was ported for a new type of source : the datastore 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    30
from GoogleAppEngine_.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    31
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    32
Global architecture
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    33
-------------------
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    34
.. image:: images/archi_globale.png
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    35
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    36
.. note::
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    37
  For real, the client and server sides are integrated in the same
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    38
  process and interact directly, without the needs for distants
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    39
  calls using Pyro. It is important to note down that those two
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    40
  sides, client/server, are disjointed and it is possible to execute
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    41
  a couple of calls in distincts processes to balance the load of
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    42
  your web site on one or more machines.
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    43
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    44
.. _TermsVocabulary:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    45
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    46
Terms and vocabulary
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    47
--------------------
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    48
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    49
*schema*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    50
  The schema defines the data model of an application based on entities
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    51
  and relations, modeled with a comprehensive language made of Python
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    52
  classes based on `yams`_ library. This is the core piece
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    53
  of an application. It is initially defined in the file system and is
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    54
  stored in the database at the time an instance is created. `CubicWeb`
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    55
  provides a certain number of system entities included automatically as
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    56
  it is necessarry for the core of `CubicWeb` and a library of
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
    57
  cubes that can be explicitely included if necessary.
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    58
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    59
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    60
*entity type*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    61
  An entity is a set of attributes; the essential attribute of
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    62
  an entity is its key, named eid
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    63
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    64
*relation type*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    65
  Entities are linked to each others by relations. In `CubicWeb`
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    66
  relations are binary: by convention we name the first item of
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    67
  a relation the `subject` and the second the `object`.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    68
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    69
*final entity type*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    70
  Final types corresponds to the basic types such as string of characters,
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    71
  integers... Those types have a main property which is that they can
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    72
  only be used as `object` of a relation. The attributes of an entity
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    73
  (non final) are entities (finals).
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    74
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    75
*final relation type*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    76
  A relation is said final if its `object` is a final type. This is equivalent
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    77
  to an entity attribute.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    78
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
    79
*relation definition*
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
    80
  a relation definition is a 3-uple (subject entity type, relation type, object entity type),
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
    81
  with an associated set of property such as cardinality, constraints...
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
    82
  
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    83
*repository*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    84
  This is the RQL server side of `CubicWeb`. Be carefull not to get
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    85
  confused with a Mercurial repository or a debian repository.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    86
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    87
*source*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    88
  A data source is a container of data (SGBD, LDAP directory, `Google
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    89
  App Engine`'s datastore ...) integrated in the
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    90
  `CubicWeb` repository. This repository has at least one source, `system` which 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    91
  contains the schema of the application, plain-text index and others
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    92
  vital informations for the system.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    94
*configuration*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
    95
  It is possible to create differents configurations for an instance:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
    96
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    97
  - ``repository`` : repository only, accessible for clients using Pyro
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    98
  - ``twisted`` : web interface only, access the repository using Pyro
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
    99
  - ``all-in-one`` : web interface and repository in a single process. 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   100
     The repository could be or not accessible using Pyro.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   101
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   102
*cube*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   103
  A cube is a model grouping one or multiple data types and/or views
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   104
  to provide a specific functionnality or a complete `CubicWeb` application
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   105
  potentially using other cubes. The available subes are located in the file
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   106
  system at `/path/to/forest/cubicweb/cubes`.
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   107
  Larger applications can be built faster by importing cubes,
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   108
  adding entities and relationships and overriding the
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   109
  views that need to display or edit informations not provided by
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   110
  cubes.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   111
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   112
*instance*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   113
  An instance is a specific installation of a cube. All the required 
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   114
  configuration files necessarry for the well being of your web application
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   115
  are grouped in an instance. This will refer to the cube(s) your application
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   116
  is based on.
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   117
  By example logilab.org and our intranet are two instances of a single
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   118
  cube jpl, developped internally.
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   119
  The instances are defined in the directory `~/etc/cubicweb.d`.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   120
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   121
*application*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   122
  The term application is sometime used to talk about an instance
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   123
  and sometimes to talk of a cube depending on the context. 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   124
  So we would like to avoid using this term and try to use *cube* and
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   125
  *instance* instead.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   126
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   127
*result set*
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   128
  This object contains the results of an RQL query sent to the source
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   129
  and information on the query.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   130
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   131
*Pyro*
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   132
  `Python Remote Object`_, distributed objects system similar to Java's RMI
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   133
  (Remote Method Invocation), which can be used for the dialog between the web
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   134
  side of the framework and the RQL repository.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   135
111
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   136
*query language*
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   137
  A full-blown query language named RQL is used to formulate requests
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   138
  to the database or any sources such as LDAP or `Google App Engine`'s 
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   139
  datastore.
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   140
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   141
*views*
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   142
  A view is applied to a `result set` to present it as HTML, XML,
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   143
  JSON, CSV, etc. Views are implemented as Python classes. There is no
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   144
  templating language.
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   145
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   146
*generated user interface*
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   147
  A user interface is generated on-the-fly from the schema definition:
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   148
  entities can be created, displayed, updated and deleted. As display
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   149
  views are not very fancy, it is usually necessary to develop your
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   150
  own. Any generated view can be overridden by defining a new one with
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   151
  the same identifier.
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   152
7a06f06de32f [doc] Merged GAE and foundations.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 96
diff changeset
   153
  
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   154
.. _`Python Remote Object`: http://pyro.sourceforge.net/
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   155
.. _`yams`: http://www.logilab.org/project/yams/
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   156
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   157
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   158
`CubicWeb` engine
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   159
-----------------
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   160
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   161
The engine in `CubicWeb` is a set of classes managing a set of objects loaded
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   162
dynamically at the startup of `CubicWeb` (*appobjects*). Those dynamics objects, based on the schema
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   163
or the library, are building the final application. The differents dymanic components are
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   164
by example:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   165
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   166
* client and server side
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   167
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   168
  - entities definition, containing the logic which enables application data manipulation
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   169
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   170
* client side
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   171
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   172
  - *views*, or more specifically
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   173
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   174
    - boxes
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   175
    - header and footer
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   176
    - forms
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   177
    - page templates
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   178
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   179
  - *actions*
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   180
  - *controllers*
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   181
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   182
* server side
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   183
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   184
  - notification hooks
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   185
  - notification views
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   186
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   187
The components of the engine are:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   188
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   189
* a frontal web (only twisted is available so far), transparent for dynamic objects
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   190
* an object that encapsulates the configuration
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   191
* a `registry` (`cubicweb.cwvreg`) containing the dynamic objects loaded automatically
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   192
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   193
Every *appobject* may access to the instance configuration using its *config* attribute
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   194
and to the registry using its *vreg* attribute.
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   195
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   196
Details of the recording process
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   197
--------------------------------
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   198
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   199
At startup, the `registry` or registers base, inspects a number of directories
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   200
looking for compatible classes definition. After a recording process, the objects
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   201
are assigned to registers so that they can be selected dynamically while the
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   202
application is running.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   203
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   204
The base class of those objects is `AppRsetObject` (module `cubicweb.common.appobject`).
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   205
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   206
XXX registers example
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   207
XXX actual details of the recording process!
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   208
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   209
Runtime objects selection
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   210
-------------------------
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   211
XXX tell why it's a cw foundation!
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   212
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   213
Application objects are stored in the registry using a two level hierarchy :
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   214
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   215
  object's `__registry__` : object's `id` : [list of app objects]
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   216
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   217
The following rules are applied to select an object given a register and an id and an input context:
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   218
* each object has a selector
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   219
  - its selector may be derivated from a set of basic (or not :)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   220
    selectors using `chainall` or `chainfirst` combinators
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   221
* a selector return a score >= 0
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   222
* a score of 0 means the objects can't be applied to the input context
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   223
* the object with the greatest score is selected. If multiple objects have an
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   224
  identical score, one of them is selected randomly (this is usually a bug)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   225
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   226
The object's selector is the `__selector__` class method on the object's class.
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   227
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   228
The score is used to choose the most pertinent objects where there are more than
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   229
one selectable object. For instance, if you're selecting the primary
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   230
(eg `id = 'primary'`) view (eg `__registry__ = 'view'`) for a result set containing
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   231
a `Card` entity, 2 objects will probably be selectable:
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   232
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   233
* the default primary view (`accepts = 'Any'`)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   234
* the specific `Card` primary view (`accepts = 'Card'`)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   235
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   236
This is because primary views are using the `accept_selector` which is considering the
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   237
`accepts` class attribute of the object's class. Other primary views specific to other
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   238
entity types won't be selectable in this case. And among selectable objects, the
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   239
accept selector will return a higher score the the second view since it's more
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   240
specific, so it will be selected as expected.
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   241
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   242
Usually, you won't define it directly but by defining the `__selectors__` tuple
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   243
on the class, with ::
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   244
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   245
  __selectors__ = (sel1, sel2)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   246
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   247
which is equivalent to ::
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   248
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   249
  __selector__ = chainall(sel1, sel2)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   250
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   251
The former is prefered since it's shorter and it's ease overriding in
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   252
subclasses (you have access to sub-selectors instead of the wrapping function).
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   253
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   254
:chainall(selectors...): if one selector return 0, return 0, else return the sum of scores
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   255
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   256
:chainfirst(selectors...): return the score of the first selector which has a non zero score
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   257
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   258
XXX describe standard selector (link to generated api doc!)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   259
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   260
Example
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   261
~~~~~~~
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   262
Le but final : quand on est sur un Blog, on veut que le lien rss de celui-ci pointe
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   263
vers les entrées de ce blog, non vers l'entité blog elle-même.
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   264
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   265
L'idée générale pour résoudre ça : on définit une méthode sur les classes d'entité
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   266
qui renvoie l'url du flux rss pour l'entité en question. Avec une implémentation
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   267
par défaut sur AnyEntity et une implémentation particulière sur Blog qui fera ce
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   268
qu'on veut.
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   269
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   270
La limitation : on est embêté dans le cas ou par ex. on a un result set qui contient
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   271
plusieurs entités Blog (ou autre chose), car on ne sait pas sur quelle entité appeler
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   272
la méthode sus-citée. Dans ce cas, on va conserver le comportement actuel (eg appel
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   273
à limited_rql)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   274
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   275
Donc : on veut deux cas ici, l'un pour un rset qui contient une et une seule entité,
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   276
l'autre pour un rset qui contient plusieurs entité.
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   277
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   278
Donc... On a déja dans web/views/boxes.py la classe RSSIconBox qui fonctionne. Son
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   279
sélecteur ::
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   280
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   281
  class RSSIconBox(ExtResourcesBoxTemplate):
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   282
    """just display the RSS icon on uniform result set"""
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   283
    __selectors__ = ExtResourcesBoxTemplate.__selectors__ + (nfentity_selector,)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   284
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   285
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   286
indique qu'il prend en compte :
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   287
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   288
* les conditions d'apparition de la boite (faut remonter dans les classes parentes
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   289
  pour voir le détail)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   290
* nfentity_selector, qui filtre sur des rset contenant une liste d'entité non finale
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   291
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   292
ça correspond donc à notre 2eme cas. Reste à fournir un composant plus spécifique
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   293
pour le 1er cas ::
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   294
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   295
  class EntityRSSIconBox(RSSIconBox):
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   296
    """just display the RSS icon on uniform result set for a single entity"""
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   297
    __selectors__ = RSSIconBox.__selectors__ + (onelinerset_selector,)
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   298
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   299
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   300
Ici, on ajoute onelinerset_selector, qui filtre sur des rset de taille 1. Il faut
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   301
savoir que quand on chaine des selecteurs, le score final est la somme des scores
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   302
renvoyés par chaque sélecteur (sauf si l'un renvoie zéro, auquel cas l'objet est
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   303
non sélectionnable). Donc ici, sur un rset avec plusieurs entités, onelinerset_selector
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   304
rendra la classe EntityRSSIconBox non sélectionnable, et on obtiendra bien la
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   305
classe RSSIconBox. Pour un rset avec une entité, la classe EntityRSSIconBox aura un
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   306
score supérieur à RSSIconBox et c'est donc bien elle qui sera sélectionnée.
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   307
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   308
Voili voilou, il reste donc pour finir tout ça :
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   309
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   310
* à définir le contenu de la méthode call de EntityRSSIconBox
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   311
* fournir l'implémentation par défaut de la méthode renvoyant l'url du flux rss sur
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   312
  AnyEntity
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   313
* surcharger cette methode dans blog.Blog
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   314
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   315
When to use selectors?
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   316
~~~~~~~~~~~~~~~~~~~~~~
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   317
Il faut utiliser les sélecteurs pour faire des choses différentes en
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   318
fonction de ce qu'on a en entrée. Dès qu'on a un "if" qui teste la
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   319
nature de `self.rset` dans un objet, il faut très sérieusement se
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   320
poser la question s'il ne vaut pas mieux avoir deux objets différent
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   321
avec des sélecteurs approprié.
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   322
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   323
If this is so fundamental, why don't I see them more often?
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   324
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   325
Because you're usually using base classes which are hiding the plumbing
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   326
of __registry__ (almost always), id (often when using "standard" object),
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   327
register and selector.
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   328
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   329
API Python/RQL
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   330
--------------
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   331
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   332
Inspired from the standard db-api, with a Connection object having the methods
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   333
cursor, rollback and commit essentially. The most important method is
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   334
the `execute` method of a cursor :
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   335
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   336
`execute(rqlstring, args=None, eid_key=None, build_descr=True)`
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   337
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   338
:rqlstring: the RQL query to execute (unicode)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   339
:args: if the query contains substitutions, a dictionnary containing the values to use
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   340
:eid_key: 
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   341
   an implementation detail of the RQL queries cache implies that if a substitution
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   342
   is used to introduce an eid *susceptible to raise the ambiguities in the query
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   343
   type resolution*, then we have to specify the correponding key in the dictionnary
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   344
   through this argument
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   345
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   346
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   347
The `Connection` object owns the methods `commit` and `rollback`. You *should
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   348
never need to use them* during the development of the web interface based on
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   349
the `CubicWeb` framework as it determines the end of the transaction depending 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   350
on the query execution success.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   351
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   352
.. note::
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   353
  While executing updates queries (SET, INSERT, DELETE), if a query generates
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   354
  an error related to security, a rollback is automatically done on the current
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   355
  transaction.
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   356
  
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   357
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   358
The `Request` class (`cubicweb.web`)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   359
------------------------------------
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   360
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   361
A request instance is created when an HTPP request is sent to the web server.
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   362
It contains informations such as forms parameters, user authenticated, etc.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   363
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   364
**Globally, a request represents a user query, either through HTTP or not
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   365
(we also talk about RQL queries on the server side by example)**
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   366
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   367
An instance of `Request` has the following attributes:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   368
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   369
* `user`, instance of `cubicweb.common.utils.User` corresponding to the authenticated
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   370
  user
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   371
* `form`, dictionnary containing the values of a web form
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   372
* `encoding`, characters encoding to use in the response
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   373
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   374
But also:
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   375
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   376
:Session data handling:
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   377
  * `session_data()`, returns a dictinnary containing all the session data
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   378
  * `get_session_data(key, default=None)`, returns a value associated to the given
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   379
    key or the value `default` if the key is not defined
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   380
  * `set_session_data(key, value)`, assign a value to a key
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   381
  * `del_session_data(key)`,  suppress the value associated to a key
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   382
    
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   383
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   384
:Cookies handling:
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   385
  * `get_cookie()`, returns a dictionnary containing the value of the header
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   386
    HTTP 'Cookie'
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   387
  * `set_cookie(cookie, key, maxage=300)`, adds a header HTTP `Set-Cookie`,
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   388
    with a minimal 5 minutes length of duration by default (`maxage` = None
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   389
    returns a *session* cookie which will expire when the user closes the browser
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   390
    window
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   391
  * `remove_cookie(cookie, key)`, forces a value to expire
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   392
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   393
:URL handling:
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   394
  * `url()`, returns the full URL of the HTTP request
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   395
  * `base_url()`, returns the root URL of the web application
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   396
  * `relative_path()`, returns the relative path of the request
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   397
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   398
:And more...:
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   399
  * `set_content_type(content_type, filename=None)`, adds the header HTTP
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   400
    'Content-Type'
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   401
  * `get_header(header)`, returns the value associated to an arbitrary header
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   402
    of the HTTP request
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   403
  * `set_header(header, value)`, adds an arbitrary header in the response
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   404
  * `cursor()` returns a RQL cursor on the session
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   405
  * `execute(*args, **kwargs)`, shortcut to ``.cursor().execute()``
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   406
  * `property_value(key)`, properties management (`EProperty`)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   407
  * dictionnary `data` to store data to share informations between components
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   408
    *while a request is executed*
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   409
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   410
Please note down that this class is abstract and that a concrete implementation
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   411
will be provided by the *frontend* web used (in particular *twisted* as of
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   412
today). For the views or others that are executed on the server side,
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   413
most of the interface of `Request` is defined in the session associated
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   414
to the client.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   415
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   416
The `AppObject` class
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   417
---------------------
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   418
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   419
In general:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   420
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   421
* we do not inherit directly from this class but from a more specific
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   422
  class such as `AnyEntity`, `EntityView`, `AnyRsetView`,
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   423
  `Action`...
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   424
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   425
* to be recordable, a subclass has to define its own register (attribute
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   426
  `__registry__`) and its identifier (attribute `id`). Usually we do not have
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   427
  to take care of the register, only the identifier `id`.
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   428
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   429
We can find a certain number of attributes and methods defined in this class 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   430
and so common to all the application objects:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   431
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   432
At the recording, the following attributes are dynamically added to
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   433
the *subclasses*:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   434
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   435
* `vreg`, the `vregistry` of the application
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   436
* `schema`, the application schema
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   437
* `config`, the application configuration
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   438
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   439
We also find on instances, the following attributes:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   440
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   441
* `req`, `Request` instance
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   442
* `rset`, the *result set* associated to the object if necessarry
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   443
* `cursor`, rql cursor on the session
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   444
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   445
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   446
:URL handling:
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   447
  * `build_url(method=None, **kwargs)`, returns an absolute URL based on
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   448
    the given arguments. The *controller* supposed to handle the response
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   449
    can be specified through the special parameter `method` (the connection
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   450
    is theoretically done automatically :).
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   451
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   452
  * `datadir_url()`, returns the directory of the application data
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   453
    (contains static files such as images, css, js...)
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   454
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   455
  * `base_url()`, shortcut to `req.base_url()`
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   456
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   457
  * `url_quote(value)`, version *unicode safe* of the function `urllib.quote`
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   458
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   459
:Data manipulation:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   460
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   461
  * `etype_rset(etype, size=1)`, shortcut to `vreg.etype_rset()`
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   462
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   463
  * `eid_rset(eid, rql=None, descr=True)`, returns a *result set* object for
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   464
    the given eid
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   465
  * `entity(row, col=0)`, returns the entity corresponding to the data position
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   466
    in the *result set* associated to the object
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   467
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   468
  * `complete_entity(row, col=0, skip_bytes=True)`, is equivalent to `entity` but
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   469
    also call the method `complete()` on the entity before returning it
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   470
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   471
:Data formatting:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   472
  * `format_date(date, date_format=None, time=False)`
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   473
  * `format_time(time)`
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   474
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   475
:And more...:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   476
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   477
  * `external_resource(rid, default=_MARKER)`, access to a value defined in the
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   478
    configuration file `external_resource`
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   479
    
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   480
  * `tal_render(template, variables)`, 
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   481
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   482
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   483
.. note::
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   484
  When we inherit from `AppObject` (even not directly), you *always* have to use
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   485
  **super()** to get the methods and attributes of the superclasses, and not
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   486
  use the class identifier.
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   487
  By example, instead of writting: ::
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   488
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   489
      class Truc(PrimaryView):
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   490
          def f(self, arg1):
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   491
              PrimaryView.f(self, arg1)
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   492
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   493
  You'd better write: ::
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   494
  
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   495
      class Truc(PrimaryView):
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   496
          def f(self, arg1):
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   497
              super(Truc, self).f(arg1)
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   498
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   499
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   500
Standard structure for a cube
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   501
-----------------------------
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   502
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   503
A complex cube is structured as follows:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   504
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   505
::
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   506
  
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   507
  mycube/
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   508
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   509
  |-- schema.py
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   510
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   511
  |-- entities/
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   512
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   513
  |-- sobjects/
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   514
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   515
  |-- views/
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   516
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   517
  |-- test/
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   518
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   519
  |-- i18n/
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   520
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   521
  |-- data/
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   522
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   523
  |-- migration/
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   524
  | |- postcreate.py
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   525
  | \- depends.map
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   526
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   527
  |-- debian/
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   528
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   529
  \-- __pkginfo__.py
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   530
    
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   531
We can use simple Python module instead of packages, by example: 
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   532
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   533
::
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   534
  
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   535
  mycube/
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   536
  |
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   537
  |-- entities.py
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   538
  |-- hooks.py
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   539
  \-- views.py
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   540
    
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   541
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   542
where :
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   543
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   544
* ``schema`` contains the schema definition (server side only)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   545
* ``entities`` contains the entities definition (server side and web interface)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   546
* ``sobjects`` contains hooks and/or views notifications (server side only)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   547
* ``views`` contains the different components of the web interface (web interface only)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   548
* ``test`` contains tests specifics to the application (not installed)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   549
* ``i18n`` contains the messages catalog for supported languages (server side and 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   550
  web interface) 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   551
* ``data`` contains arbitrary data files served statically
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   552
  (images, css, javascripts files)... (web interface only)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   553
* ``migration`` contains the initialization file for new instances
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   554
  (``postcreate.py``) and in general a file containing the `CubicWeb` dependancies 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   555
  of the cube depending on its version (``depends.map``)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   556
* ``debian`` contains all the files that manages the debian packaging
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   557
  (you would find there the classical structure with ``control``, ``rules``, 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   558
  ``changelog``... (not installed)
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   559
* the file ``__pkginfo__.py`` provides meta-data on the cube, especially the 
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   560
  distribution name and the current version (server side and web interface) or
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   561
  also the sub-cubes used by this cube
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   562
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   563
The only required files are:
93
9c919a47e140 [doc] total file reorganisation - phase 1 complete
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents:
diff changeset
   564
96
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   565
* the file ``__pkginfo__.py``
c1d04b2fa8c6 Add missing images.
Sandrine Ribeau <sandrine.ribeau@logilab.fr>
parents: 93
diff changeset
   566
* the schema definition
110
d3005cdc968f add detailled notes about objects selection (to be translated / proprified...)
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents: 96
diff changeset
   567
  XXX false, we may want to have cubes which are only adding a service, no persistent data (eg embeding for instance)
116
e2303f9b5bfa [doc] more merging and reorg
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 113
diff changeset
   568
e2303f9b5bfa [doc] more merging and reorg
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 113
diff changeset
   569
.. include:: 02-01-registry.en.txt
e2303f9b5bfa [doc] more merging and reorg
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 113
diff changeset
   570
.. include:: 02-02-configuration.en.txt