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