# HG changeset patch # User Nicolas Chauvat # Date 1245436712 -7200 # Node ID cf8f9180e63eaa10b383022f523b1b41ee68f762 # Parent 19861294506fbc0ef43cb7d87c8cea1cf1e83a27 delete-trailing-whitespace diff -r 19861294506f -r cf8f9180e63e common/mail.py --- a/common/mail.py Fri Jun 19 09:19:27 2009 +0200 +++ b/common/mail.py Fri Jun 19 20:38:32 2009 +0200 @@ -19,7 +19,7 @@ def addrheader(uaddr, uname=None): # even if an email address should be ascii, encode it using utf8 since # application tests may generate non ascii email address - addr = uaddr.encode('UTF-8') + addr = uaddr.encode('UTF-8') if uname: return '%s <%s>' % (header(uname).encode(), addr) return addr diff -r 19861294506f -r cf8f9180e63e devtools/repotest.py --- a/devtools/repotest.py Fri Jun 19 09:19:27 2009 +0200 +++ b/devtools/repotest.py Fri Jun 19 20:38:32 2009 +0200 @@ -117,7 +117,7 @@ def tearDown(self): ExecutionPlan._check_permissions = _orig_check_permissions rqlannotation._select_principal = _orig_select_principal - + def set_debug(self, debug): set_debug(debug) diff -r 19861294506f -r cf8f9180e63e doc/book/en/admin/create-instance.rst --- a/doc/book/en/admin/create-instance.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/admin/create-instance.rst Fri Jun 19 20:38:32 2009 +0200 @@ -7,7 +7,7 @@ ----------------- Now that we created our cube, we can create an instance to view our -application in a web browser. To do so we will use a `all-in-one` +application in a web browser. To do so we will use a `all-in-one` configuration to simplify things :: cubicweb-ctl create -c all-in-one mycube myinstance @@ -45,8 +45,8 @@ The option `-D` specify the *debug mode* : the instance is not running in server mode and does not disconnect from the termnial, which simplifies debugging in case the instance is not properly launched. You can see how it looks by -visiting the URL `http://localhost:8080` (the port number depends of your -configuration). To login, please use the cubicweb administrator login/psswd you +visiting the URL `http://localhost:8080` (the port number depends of your +configuration). To login, please use the cubicweb administrator login/psswd you defined when you created the instance. To shutdown the instance, Crtl-C in the terminal window is enough. diff -r 19861294506f -r cf8f9180e63e doc/book/en/admin/gae.rst --- a/doc/book/en/admin/gae.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/admin/gae.rst Fri Jun 19 20:38:32 2009 +0200 @@ -9,7 +9,7 @@ `Google AppEngine`_ is provided with a partial port of the `Django` framework, but Google stated at Google IO 2008 that it would not support a specific Python web framework and that all -community-supported frameworks would be more than welcome [1]_. +community-supported frameworks would be more than welcome [1]_. Therefore `Logilab`_ ported `CubicWeb` to run on top of `Google AppEngine`'s datastore. @@ -26,7 +26,7 @@ Please follow instructions on how to install `CubicWeb` framework -(:ref:`CubicWebInstallation`). +(:ref:`CubicWebInstallation`). Installation ------------ @@ -37,7 +37,7 @@ cubicweb-ctl newgapp This will create a directory containing :: - + `-- myapp/ |-- app.conf |-- app.yaml @@ -73,17 +73,17 @@ |-- yams/ `-- yapps/ - + This skeleton directory is a working `AppEngine` application. You will recognize the files ``app.yaml`` and ``main.py``. All the rest is the -`CubicWeb` framework and its third-party libraries. You will notice that +`CubicWeb` framework and its third-party libraries. You will notice that the directory ``cubes`` is a library of reusable cubes. The main directories that you should know about are: - - ``cubes`` : this is a library of reusable yams cubes. To use - those cubes you will list them in the variable - `included-yams-cubes` of ``app.conf``. See also :ref:`cubes`. + - ``cubes`` : this is a library of reusable yams cubes. To use + those cubes you will list them in the variable + `included-yams-cubes` of ``app.conf``. See also :ref:`cubes`. - [WHICH OTHER ONES SHOULD BE LISTED HERE?] Dependencies @@ -91,7 +91,7 @@ Before starting anything, please make sure the following packages are installed: - yaml : by default google appengine is providing yaml; make sure you can - import it. We recommend you create a symbolic link yaml instead of installing + import it. We recommend you create a symbolic link yaml instead of installing and using python-yaml: yaml -> full/path/to/google_appengine/lib/yaml/lib/yaml/ - gettext @@ -99,12 +99,12 @@ Setup ~~~~~ -Once you executed ``cubicweb-ctl newgapp ``, you can use that ``myapp/`` +Once you executed ``cubicweb-ctl newgapp ``, you can use that ``myapp/`` as an application directory and do as follows. This installation directory provides a configuration for an instance of `CubicWeb` -ported for Google App Engine. It is installed with its own command ``laxctl`` -which is a port of the command tool ``cubicweb-ctl`` originally developped for +ported for Google App Engine. It is installed with its own command ``laxctl`` +which is a port of the command tool ``cubicweb-ctl`` originally developped for `CubicWeb`. You can have the details of available commands by running :: @@ -119,7 +119,7 @@ ``myapp/i18n``. To compile the translation files, use the `gettext` tools or the ``laxctl`` command :: - $ python myapp/bin/laxctl i18ncube + $ python myapp/bin/laxctl i18ncube $ python myapp/bin/laxctl i18ninstance Ignore the errors that print "No translation file found for domain @@ -132,7 +132,7 @@ You will never need to add new entries in the translation catalog. Instead we would recommand you to use ``self.req._("msgId")`` in your application code to flag new message id to add to the catalog, where ``_`` refers to -xgettext that is used to collect new strings to translate. +xgettext that is used to collect new strings to translate. While running ``laxctl i18ncube``, new string will be added to the catalogs. Generating the data directory @@ -165,7 +165,7 @@   # does this application rely on google authentication service or not. use-google-auth=no - + In ``app.yaml`` comment the `login: required` set by default in the handler:: - url: .* @@ -187,8 +187,8 @@ $ python /path/to/google_appengine/dev_appserver.py /path/to/myapp/ -Once the local server is started, visit `http://MYAPP_URL/_load `_ and sign in as administrator. -This will initialize the repository and enable you to log in into +Once the local server is started, visit `http://MYAPP_URL/_load `_ and sign in as administrator. +This will initialize the repository and enable you to log in into the application and continue the installation. You should be redirected to a page displaying a message `content initialized`. @@ -197,7 +197,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~ You, then, want to visit `http://MYAPP_URL/?vid=authinfo `_ . -If you selected not to use google authentication, you will be prompted to a +If you selected not to use google authentication, you will be prompted to a login form where you should initialize the administrator login (recommended to use admin/admin at first). You will then be redirected to a page providing you the value to provide to ``./bin/laxctl --cookie``. @@ -212,21 +212,21 @@ :alt: displaying the detailed view of the cookie values returned -.. note:: In case you are not redirected to a page providing the - option --cookie value, please visit one more time +.. note:: In case you are not redirected to a page providing the + option --cookie value, please visit one more time `http://MYAPP_URL/?vid=authinfo `_ . Once, you have this value, then return to the shell and execute :: - + $ python myapp/bin/laxctl db-init --cookie='dev_appserver_login=test@example.com:True; __session=7bbe973a6705bc5773a640f8cf4326cc' localhost:8080 .. note:: In the case you are not using google authentication, the value returned - by `http://MYAPP_URL/?vid=authinfo `_ + by `http://MYAPP_URL/?vid=authinfo `_ will look like : --cookie='__session=2b45d1a9c36c03d2a30cedb04bc37b6d' Log out by clicking in the menu at the top right corner -and restart browsing from `http://MYAPP_URL/ `_ +and restart browsing from `http://MYAPP_URL/ `_ as a normal user. Unless you did something to change it, http://MYAPP_URL should be diff -r 19861294506f -r cf8f9180e63e doc/book/en/admin/instance-config.rst --- a/doc/book/en/admin/instance-config.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/admin/instance-config.rst Fri Jun 19 20:38:32 2009 +0200 @@ -51,7 +51,7 @@ RewriteCond %(REQUEST_URI) ^/demo RewriteRule ^/demo$ /demo/ RewriteRule ^/demo/(.*) http://127.0.0.1:8080/$1 [L,P] - + and for the https::: RewriteCond %(REQUEST_URI) ^/ demo diff -r 19861294506f -r cf8f9180e63e doc/book/en/admin/setup.rst --- a/doc/book/en/admin/setup.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/admin/setup.rst Fri Jun 19 20:38:32 2009 +0200 @@ -35,7 +35,7 @@ You can now install the required packages with the following command:: - apt-get update + apt-get update apt-get install cubicweb cubicweb-dev `cubicweb` installs the framework itself, allowing you to create @@ -89,12 +89,12 @@ ------------------------- If you installed `CubicWeb` by cloning the Mercurial forest, then you -will need to update the environment variable PYTHONPATH by adding +will need to update the environment variable PYTHONPATH by adding the path to the forest ``cubicweb``: Add the following lines to either `.bashrc` or `.bash_profile` to configure your development environment :: - + export PYTHONPATH=/full/path/to/cubicweb-forest If you installed the debian packages, no configuration is required. @@ -134,34 +134,34 @@ $ initdb -D /path/to/pgsql - Once initialized, start the database server Postgres + Once initialized, start the database server Postgres with the command:: - + $ postgres -D /path/to/psql If you cannot execute this command due to permission issues, please make sure that your username has write access on the database. :: - + $ chown username /path/to/pgsql * The database authentication can be either set to `ident sameuser` - or `md5`. + or `md5`. If set to `md5`, make sure to use an existing user of your database. If set to `ident sameuser`, make sure that your client's operating system user name has a matching user in the database. If not, please do as follow to create a user:: - + $ su $ su - postgres $ createuser -s -P username The option `-P` (for password prompt), will encrypt the password with - the method set in the configuration file ``pg_hba.conf``. + the method set in the configuration file ``pg_hba.conf``. If you do not use this option `-P`, then the default value will be null and you will need to set it with:: - + $ su postgres -c "echo ALTER USER username WITH PASSWORD 'userpasswd' | psql" This login/password will be requested when you will create an diff -r 19861294506f -r cf8f9180e63e doc/book/en/admin/site-config.rst --- a/doc/book/en/admin/site-config.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/admin/site-config.rst Fri Jun 19 20:38:32 2009 +0200 @@ -14,12 +14,12 @@ This menu provides you a way to adjust some navigation options depending on your needs, such as the number of entities to display by page of results. Follows the detailled list of available options : - + * navigation.combobox-limit : maximum number of entities to display in related combo box (sample format: 23) -* navigation.page-size : maximum number of objects displayed by page of results +* navigation.page-size : maximum number of objects displayed by page of results (sample format: 23) -* navigation.related-limit : maximum number of related entities to display in +* navigation.related-limit : maximum number of related entities to display in the primary view (sample format: 23) * navigation.short-line-size : maximum number of characters in short description (sample format: 23) @@ -47,17 +47,17 @@ Actions ~~~~~~~ This menu provides a way to configure the context in which you expect the actions -to be displayed to the user and if you want the action to be visible or not. -You must have notice that when you view a list of entities, an action box is -available on the left column which display some actions as well as a drop-down -menu for more actions. +to be displayed to the user and if you want the action to be visible or not. +You must have notice that when you view a list of entities, an action box is +available on the left column which display some actions as well as a drop-down +menu for more actions. The context available are : * mainactions : actions listed in the left box * moreactions : actions listed in the `more` menu of the left box * addrelated : add actions listed in the left box -* useractions : actions listed in the first section of drop-down menu +* useractions : actions listed in the first section of drop-down menu accessible from the right corner user login link * siteactions : actions listed in the second section of drop-down menu accessible from the right corner user login link @@ -65,15 +65,15 @@ Boxes ~~~~~ -The application has already a pre-defined set of boxes you can use right away. +The application has already a pre-defined set of boxes you can use right away. This configuration section allows you to place those boxes where you want in the -application interface to customize it. +application interface to customize it. The available boxes are : * actions box : box listing the applicable actions on the displayed data -* boxes_blog_archives_box : box listing the blog archives +* boxes_blog_archives_box : box listing the blog archives * possible views box : box listing the possible views for the displayed data @@ -81,7 +81,7 @@ * search box : search box -* startup views box : box listing the configuration options available for +* startup views box : box listing the configuration options available for the application site, such as `Preferences` and `Site Configuration` Components diff -r 19861294506f -r cf8f9180e63e doc/book/en/annexes/cookbook.rst --- a/doc/book/en/annexes/cookbook.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/annexes/cookbook.rst Fri Jun 19 20:38:32 2009 +0200 @@ -70,11 +70,11 @@ you would not be able to use dbapi. :: from cubicweb import dbapi - + cnx = dbapi.connection(database='instance-id', user='admin', password='admin') cur = cnx.cursor() for name in ('Personal', 'Professional', 'Computers'): cur.execute('INSERT Blog B: B name %s', name) cnx.commit() - + diff -r 19861294506f -r cf8f9180e63e doc/book/en/annexes/cubicweb-ctl.rst --- a/doc/book/en/annexes/cubicweb-ctl.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/annexes/cubicweb-ctl.rst Fri Jun 19 20:38:32 2009 +0200 @@ -28,7 +28,7 @@ * ``newcube``, create a new cube on the file system based on the name given in the parameters. This command create a cube from an application skeleton that includes default files required for debian packaging. - + Command to create an instance ----------------------------- @@ -75,7 +75,7 @@ ---------------------------------- * ``i18ncubicweb``, regenerates messages catalogs of the `CubicWeb` library * ``i18ncube``, regenerates the messages catalogs of a cube -* ``i18ninstance``, recompiles the messages catalogs of an instance. +* ``i18ninstance``, recompiles the messages catalogs of an instance. This is automatically done while upgrading. See also chapter :ref:`internationalisation`. @@ -116,7 +116,7 @@ This will create a new cube in ``/path/to/forest/cubicweb/cubes/`` for a Mercurial forest installation, or in ``/usr/share/cubicweb/cubes`` -for a debian packages installation, and then create an instance as +for a debian packages installation, and then create an instance as explained just above. diff -r 19861294506f -r cf8f9180e63e doc/book/en/annexes/faq.rst --- a/doc/book/en/annexes/faq.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/annexes/faq.rst Fri Jun 19 20:38:32 2009 +0200 @@ -124,7 +124,7 @@ """link a version to its project. A version is necessarily linked to one and only one project. """ # some lines voluntarily missing - permissions = {'read': ('managers', 'users', 'guests',), + permissions = {'read': ('managers', 'users', 'guests',), 'delete': ('managers', ), 'add': ('managers', 'logilab', RRQLExpression('O require_permission P, P name "add_version", @@ -185,10 +185,10 @@ It depends on what has been modified in the schema. - * Update of an attribute permissions and properties: + * Update of an attribute permissions and properties: ``synchronize_eschema('MyEntity')``. - * Update of a relation permissions and properties: + * Update of a relation permissions and properties: ``synchronize_rschema('MyRelation')``. * Add an attribute: ``add_attribute('MyEntityType', 'myattr')``. @@ -304,7 +304,7 @@ the site configuration panel ``http://appurl/view?vid=systempropertiesform`` and then set ``ui.date`` and/or ``ui.datetime``. Then in the view code, use:: - + self.format_date(entity.date_attribute) Can PostgreSQL and CubicWeb authentication work with kerberos ? @@ -315,7 +315,7 @@ file while leaving the password blank. It should be enough for your instance to connect to postgresql with a kerberos ticket. - + How to load data from a script? ------------------------------- @@ -357,7 +357,7 @@ >>> from cubicweb.server.utils import crypt_password >>> crypt_password('joepass') 'qHO8282QN5Utg' - >>> + >>> and paste it in the database:: diff -r 19861294506f -r cf8f9180e63e doc/book/en/annexes/index.rst --- a/doc/book/en/annexes/index.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/annexes/index.rst Fri Jun 19 20:38:32 2009 +0200 @@ -7,7 +7,7 @@ -------------------- The following chapters are reference material. - + .. toctree:: :maxdepth: 1 diff -r 19861294506f -r cf8f9180e63e doc/book/en/annexes/mercurial.rst --- a/doc/book/en/annexes/mercurial.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/annexes/mercurial.rst Fri Jun 19 20:38:32 2009 +0200 @@ -12,7 +12,7 @@ next, and so on). Locally, we have a repository containing revisions tree, and a working directory. It is possible to put in its working directory, one of the versions of its local repository, -modify and then push it in its repository. +modify and then push it in its repository. It is also possible to get revisions from another repository or to export its own revisions from the local repository to another repository. @@ -83,7 +83,7 @@ hg incoming ssh://myhost//home/src/repo -* See what is the revision of the local repository which has been taken out +* See what is the revision of the local repository which has been taken out from the working directory and amended:: hg parent @@ -114,8 +114,8 @@ Installation of the forest extension ```````````````````````````````````` -Set up the forest extension by getting a copy of the sources -from http://hg.akoha.org/hgforest/ and adding the following +Set up the forest extension by getting a copy of the sources +from http://hg.akoha.org/hgforest/ and adding the following lines to your ``~/.hgrc``: :: [extensions] diff -r 19861294506f -r cf8f9180e63e doc/book/en/annexes/rql/implementation.rst --- a/doc/book/en/annexes/rql/implementation.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/annexes/rql/implementation.rst Fri Jun 19 20:38:32 2009 +0200 @@ -53,7 +53,7 @@ relation ::= 'NOT'? VARIABLE R_TYPE COMP_OP? expression | 'NOT'? R_TYPE VARIABLE 'IN' '(' expression (',' expression)* ')' - + expression ::= var_or_func_or_const (MATH_OP var_or_func_or_const) * | '(' expression ')' @@ -83,7 +83,7 @@ Internal representation (syntactic tree) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The tree research does not contain the selected variables +The tree research does not contain the selected variables (e.g. there is only what follows "WHERE"). The insertion tree does not contain the variables inserted or relations @@ -156,7 +156,7 @@ Document class Type <-> Document occurence_of Fiche class Type Sheet class Type <-> Form collection Collection class Type - + Therefore 1. becomes:: Document X where diff -r 19861294506f -r cf8f9180e63e doc/book/en/annexes/rql/intro.rst --- a/doc/book/en/annexes/rql/intro.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/annexes/rql/intro.rst Fri Jun 19 20:38:32 2009 +0200 @@ -11,7 +11,7 @@ user should see virtually no difference between an attribute and a relation). -RQL is inspired by SQL but is the highest level. A knowledge of the +RQL is inspired by SQL but is the highest level. A knowledge of the `CubicWeb` schema defining the application is necessary. Comparison with existing languages @@ -21,8 +21,8 @@ ``` RQL builds on the features of SQL but is at a higher level (the current implementation of RQL generates SQL). For that it is limited -to the way of browsing relations and introduces variables. -The user does not need to know the model underlying SQL, but the `CubicWeb` +to the way of browsing relations and introduces variables. +The user does not need to know the model underlying SQL, but the `CubicWeb` schema defining the application. Versa @@ -30,16 +30,16 @@ We should look in more detail, but here are already some ideas for the moment ... Versa_ is the language most similar to what we wanted to do, but the model underlying data being RDF, there is some -number of things such as namespaces or handling of the RDF types which +number of things such as namespaces or handling of the RDF types which does not interest us. On the functionality level, Versa_ is very comprehensive including through many functions of conversion and basic types manipulation, -which may need to be guided at one time or another. +which may need to be guided at one time or another. Finally, the syntax is a little esoteric. Sparql `````` The query language most similar to RQL is SPARQL_, defined by the W3C to serve -for the semantic web. +for the semantic web. The different types of queries @@ -59,7 +59,7 @@ Delete entities or relationship (`DELETE`) Remove entities or relations existing in the database. - + .. _Versa: http://uche.ogbuji.net/tech/rdf/versa/ diff -r 19861294506f -r cf8f9180e63e doc/book/en/annexes/rql/language.rst --- a/doc/book/en/annexes/rql/language.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/annexes/rql/language.rst Fri Jun 19 20:38:32 2009 +0200 @@ -81,7 +81,7 @@ * The operator `=` is the default operator. * The operator `LIKE` equivalent to `~=` can be used with the - special character `%` in a string to indicate that the chain + special character `%` in a string to indicate that the chain must start or finish by a prefix/suffix: :: @@ -90,11 +90,11 @@ * The operator `IN` provides a list of possible values: :: - + Any X WHERE X name IN ( 'chauvat', 'fayolle', 'di mascio', 'thenault') -XXX nico: "A trick <> 'bar'" wouldn't it be more convenient than +XXX nico: "A trick <> 'bar'" wouldn't it be more convenient than "NOT A trick 'bar'" ? .. _PriorityOperators: @@ -130,7 +130,7 @@ Type of selected variables. The special type `Any` is equivalent to not specify a type. :restriction: - list of conditions to test successively + list of conditions to test successively `V1 relation V2 | ` :orderterms: Definition of the selection order: variable or column number followed by @@ -167,7 +167,7 @@ Identity ```````` -You can use the special relation `identity` in a query to +You can use the special relation `identity` in a query to add an identity constraint between two variables. This is equivalent to ``is`` in python:: @@ -181,23 +181,23 @@ Limit / offset `````````````` :: - + Any P ORDERBY N LIMIT 5 OFFSET 10 WHERE P is Person, P firstname N Function calls `````````````` :: - + Any UPPER(N) WHERE P firstname N Functions on string: UPPER, LOWER - + Exists `````` :: - + Any X ORDERBY PN,N - WHERE X num N, X version_of P, P name PN, + WHERE X num N, X version_of P, P name PN, EXISTS(X in_state S, S name IN ("dev", "ready")) OR EXISTS(T tags X, T name "priority") @@ -219,12 +219,12 @@ Any C, P WHERE C is Card, P? documented_by C Any T,P,V WHERE T is Ticket, T concerns P, T done_in V? - - + + Having `````` :: - + Any X GROUPBY X WHERE X knows Y HAVING COUNT(Y) > 10 Subqueries @@ -232,14 +232,14 @@ :: (Any X WHERE X is Person) UNION (Any X WHERE X is Company) - + DISTINCT Any W, REF - WITH W, REF BEING + WITH W, REF BEING ( - (Any W, REF WHERE W is Workcase, W ref REF, + (Any W, REF WHERE W is Workcase, W ref REF, W concerned_by D, D name "Logilab") - UNION + UNION (Any W, REF WHERE W is Workcase, W ref REF, ' W split_into WP, WP name "WP1") ) @@ -317,7 +317,7 @@ The restriction can define variables used in assignments. -Caution, if a restriction is specified, the insertion is done for +Caution, if a restriction is specified, the insertion is done for *each line result returned by the restriction*. - *Insert a new person named 'foo'* @@ -331,7 +331,7 @@ INSERT Person X, Person Y: X name 'foo', Y name 'nice', X friend Y -- *Insert a new person named 'foo' and a 'friend' relation with an existing +- *Insert a new person named 'foo' and a 'friend' relation with an existing person called 'nice'* :: @@ -350,7 +350,7 @@ SET X name 'bar', X first_name 'original' WHERE X is Person, X name 'foo' -- *Insert a relation of type 'know' between objects linked by +- *Insert a relation of type 'know' between objects linked by the relation of type 'friend'* :: diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/cubes/cc-newcube.rst --- a/doc/book/en/development/cubes/cc-newcube.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/cubes/cc-newcube.rst Fri Jun 19 20:38:32 2009 +0200 @@ -7,7 +7,7 @@ cubicweb-ctl newcube mycube - # answer questions + # answer questions hg init moncube cd mycube hg add . @@ -31,12 +31,12 @@ the source code of your cube: ``cubicweb-ctl newcube --directory=/path/to/cubes/library cube_name`` - + Usage of :command:`cubicweb-ctl liveserver` ------------------------------------------- To quickly test a new cube, you can also use the `liveserver` command for cubicweb-ctl -which allows to create an instance in memory (using an SQLite database by +which allows to create an instance in memory (using an SQLite database by default) and make it accessible through a web server :: cubicweb-ctl live-server mycube diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/datamodel/baseschema.rst --- a/doc/book/en/development/datamodel/baseschema.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/datamodel/baseschema.rst Fri Jun 19 20:38:32 2009 +0200 @@ -24,7 +24,7 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * `State`, workflow state * `Transition`, workflow transition -* `TrInfo`, record of a transition trafic for an entity +* `TrInfo`, record of a transition trafic for an entity Other entity types ~~~~~~~~~~~~~~~~~~ diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/datamodel/define-workflows.rst --- a/doc/book/en/development/datamodel/define-workflows.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/datamodel/define-workflows.rst Fri Jun 19 20:38:32 2009 +0200 @@ -8,30 +8,30 @@ General ------- -A workflow describes how certain entities have to evolve between -different states. Hence we have a set of states, and a "transition graph", +A workflow describes how certain entities have to evolve between +different states. Hence we have a set of states, and a "transition graph", i.e. a list of possible transitions from one state to another state. -We will define a simple workflow for a blog, with only the following -two states: `submitted` and `published`. So first, we create a simple +We will define a simple workflow for a blog, with only the following +two states: `submitted` and `published`. So first, we create a simple `CubicWeb` in ten minutes (see :ref:`BlogTenMinutes`). Set-up a workflow ----------------- -We want to create a workflow to control the quality of the BlogEntry +We want to create a workflow to control the quality of the BlogEntry submitted on your application. When a BlogEntry is created by a user its state should be `submitted`. To be visible to all, it has to be in the state `published`. To move it from `submitted` to `published`, we need a transition that we can call `approve_blogentry`. A BlogEntry state should not be modifiable by every user. -So we have to define a group of users, `moderators`, and +So we have to define a group of users, `moderators`, and this group will have appropriate permissions to publish a BlogEntry. There are two ways to create a workflow: from the user interface, -or by defining it in ``migration/postcreate.py``. -This script is executed each time a new ``cubicweb-ctl db-init`` is done. +or by defining it in ``migration/postcreate.py``. +This script is executed each time a new ``cubicweb-ctl db-init`` is done. We strongly recommand to create the workflow in ``migration/postcreate.py`` and we will now show you how. Read `Under the hood`_ to understand why. @@ -66,7 +66,7 @@ To define our workflow for BlogDemo, please add the following lines to ``migration/postcreate.py``:: - + _ = unicode moderators = add_entity('CWGroup', name=u"moderators") @@ -88,12 +88,12 @@ add_transition(_('approve_blogentry'), 'BlogEntry', (submitted,), published, ('moderators', 'managers'),) -``add_transition`` expects +``add_transition`` expects * as the first argument the name of the transition, then the entity type on which the transition can be applied, * then the list of states on which the transition can be trigged, - * the target state of the transition, + * the target state of the transition, * and the permissions (e.g. a list of user groups who can apply the transition; the user has to belong to at least one of the listed group to perform the action). @@ -106,11 +106,11 @@ Do not forget to add the `_()` in front of all states and transitions names while creating a workflow so that they will be identified by the i18n catalog scripts. -In addition to the user group condition, we could have added a RQL condition. -In this case, the user can only perform the action if -the two conditions are satisfied. +In addition to the user group condition, we could have added a RQL condition. +In this case, the user can only perform the action if +the two conditions are satisfied. -If we use a RQL condition on a transition, we can use the following +If we use a RQL condition on a transition, we can use the following variables: * `%(eid)s`, object's eid @@ -123,7 +123,7 @@ You can notice that in the action box of a BlogEntry, the state is now listed as well as the possible transitions defined by the workflow. The transitions will only be displayed for users having the right permissions. -In our example, the transition `approve_blogentry` will only be displayed +In our example, the transition `approve_blogentry` will only be displayed for the users belonging to the group `moderators` or `managers`. @@ -141,7 +141,7 @@ with name 'published'. Whereas:: add_transition(_('approve_blogentry'), 'BlogEntry', (submitted,), published, ('moderators', 'managers'),) - + will create an entity of type ``Transition`` with name 'approve_blogentry' which will be linked to the ``State`` entities created before. As a consequence, we could use the administration interface to do these operations. @@ -151,8 +151,8 @@ Indeed, if you create the states and transitions through the user interface, next time you initialize the database -you will have to re-create all the entities. -The user interface should only be a reference for you to view the states +you will have to re-create all the entities. +The user interface should only be a reference for you to view the states and transitions, but is not the appropriate interface to define your application workflow. diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/datamodel/definition.rst --- a/doc/book/en/development/datamodel/definition.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/datamodel/definition.rst Fri Jun 19 20:38:32 2009 +0200 @@ -11,15 +11,15 @@ At this point, it is important to make clear the difference between *relation type* and *relation definition*: a *relation type* is only a relation -name with potentially other additionnal properties (see XXXX), whereas a -*relation definition* is a complete triplet -" ". -A relation type could have been implied if none is related to a +name with potentially other additionnal properties (see XXXX), whereas a +*relation definition* is a complete triplet +" ". +A relation type could have been implied if none is related to a relation definition of the schema. All `CubicWeb` built-in types are available : `String`, `Int`, `Float`, -`Decimal`, `Boolean`, `Date`, `Datetime`, `Time`, `Interval`, `Byte` +`Decimal`, `Boolean`, `Date`, `Datetime`, `Time`, `Interval`, `Byte` and `Password`. They are implicitely imported (as well as the special the function "_" for translation :ref:`internationalization`). @@ -67,7 +67,7 @@ RelationSchema.rproperties() RelationSchema.rproperty(subjtype, objtype, property name) -* Optional properties for attributes and relations : +* Optional properties for attributes and relations : - `description` : a string describing an attribute or a relation. By default this string will be used in the editing form of the entity, which means @@ -79,7 +79,7 @@ - `cardinality` : a two character string which specify the cardinality of the relation. The first character defines the cardinality of the relation on - the subject, and the second on the object. When a relation can have + the subject, and the second on the object. When a relation can have multiple subjects or objects, the cardinality applies to all, not on a one-to-one basis (so it must be consistent...). The possible values are inspired from regular expression syntax : @@ -92,24 +92,24 @@ - `meta` : boolean indicating that the relation is a meta-relation (false by default) -* optional properties for attributes : +* optional properties for attributes : - `required` : boolean indicating if the attribute is required (false by default) - `unique` : boolean indicating if the value of the attribute has to be unique or not within all entities of the same type (false by default) - - `indexed` : boolean indicating if an index needs to be created for this + - `indexed` : boolean indicating if an index needs to be created for this attribute in the database (false by default). This is useful only if you know that you will have to run numerous searches on the value of this attribute. - `default` : default value of the attribute. In case of date types, the values which could be used correspond to the RQL keywords `TODAY` and `NOW`. - + - `vocabulary` : specify static possible values of an attribute -* optional properties of type `String` : +* optional properties of type `String` : - `fulltextindexed` : boolean indicating if the attribute is part of the full text index (false by default) (*applicable on the type `Byte` @@ -120,11 +120,11 @@ - `maxsize` : integer providing the maximum size of the string (no limit by default) -* optional properties for relations : +* optional properties for relations : - `composite` : string indicating that the subject (composite == 'subject') is composed of the objects of the relations. For the opposite case (when - the object is composed of the subjects of the relation), we just set + the object is composed of the subjects of the relation), we just set 'object' as value. The composition implies that when the relation is deleted (so when the composite is deleted), the composed are also deleted. @@ -137,7 +137,7 @@ * `SizeConstraint` : allows to specify a minimum and/or maximum size on string (generic case of `maxsize`) -* `BoundConstraint` : allows to specify a minimum and/or maximum value on +* `BoundConstraint` : allows to specify a minimum and/or maximum value on numeric types * `UniqueConstraint` : identical to "unique=True" @@ -146,7 +146,7 @@ * `RQLConstraint` : allows to specify a RQL query that has to be satisfied by the subject and/or the object of the relation. In this query the variables - `S` and `O` are reserved for the entities subject and object of the + `S` and `O` are reserved for the entities subject and object of the relation. * `RQLVocabularyConstraint` : similar to the previous type of constraint except @@ -160,7 +160,7 @@ The security model ~~~~~~~~~~~~~~~~~~ -The security model of `cubicWeb` is based on `Access Control List`. +The security model of `cubicWeb` is based on `Access Control List`. The main principles are: * users and groups of users @@ -213,13 +213,13 @@ This can only be used for the actions `update` and `delete` of an entity type. -It is also possible to use specific groups if they are defined in the precreate +It is also possible to use specific groups if they are defined in the precreate of the cube (``migration/precreate.py``). Use of RQL expression for writing rights ````````````````````````````````````````` -It is possible to define RQL expression to provide update permission +It is possible to define RQL expression to provide update permission (`add`, `delete` and `update`) on relation and entity types. RQL expression for entity type permission : @@ -232,13 +232,13 @@ respectively on the current entity (on which the action is verified) and on the user who send the request -* it is possible to use, in this expression, a special relation - "has__permission" where the subject is the user and the +* it is possible to use, in this expression, a special relation + "has__permission" where the subject is the user and the object is a any variable, meaning that the user needs to have permission to execute the action on the entities related - to this variable + to this variable -For RQL expressions on a relation type, the principles are the same except +For RQL expressions on a relation type, the principles are the same except for the following : * you have to use the class `RQLExpression` in the case of a non-final relation @@ -248,7 +248,7 @@ which the action is being verified) and the user who executed the query * we can also defined rights on attributes of an entity (non-final relation), - knowing that : + knowing that : - to defines RQL expression, we have to use the class `RQLExpression` in which X represents the entity the attribute belongs to @@ -260,17 +260,17 @@ Potentially, the use of an RQL expression to add an entity or a relation can cause problems for the user interface, because if the expression uses - the entity or the relation to create, then we are not able to verify the + the entity or the relation to create, then we are not able to verify the permissions before we actually add the entity (please note that this is not a problem for the RQL server at all, because the permissions checks are - done after the creation). In such case, the permission check methods - (check_perm, has_perm) can indicate that the user is not allowed to create - this entity but can obtain the permission. + done after the creation). In such case, the permission check methods + (check_perm, has_perm) can indicate that the user is not allowed to create + this entity but can obtain the permission. To compensate this problem, it is usually necessary, for such case, to use an action that reflects the schema permissions but which enables to check properly the permissions so that it would show up if necessary. - + Use of RQL expression for reading rights ```````````````````````````````````````` @@ -318,17 +318,17 @@ or the relation in `CubicWeb` application. An attribute is defined in the schema as follows:: - + attr_name = attr_type(properties*) where `attr_type` is one of the type listed above and `properties` is a list of the attribute needs to statisfy (see :ref:`properties` -for more details). +for more details). * relations can be defined by using `ObjectRelation` or `SubjectRelation`. The first argument of `SubjectRelation` or `ObjectRelation` gives respectively - the object/subject entity type of the relation. This could be : + the object/subject entity type of the relation. This could be : * a string corresponding to an entity type @@ -337,7 +337,7 @@ * special string such as follows : - "**" : all types of entities - - "*" : all types of non-meta entities + - "*" : all types of non-meta entities - "@" : all types of meta entities but not system entities (e.g. used for the basic schema description) @@ -356,9 +356,9 @@ A relation is defined by a Python class heriting `RelationType`. The name of the class corresponds to the name of the type. The class then contains -a description of the properties of this type of relation, and could as well +a description of the properties of this type of relation, and could as well contain a string for the subject and a string for the object. This allows to create -new definition of associated relations, (so that the class can have the +new definition of associated relations, (so that the class can have the definition properties from the relation) for example :: class locked_by(RelationType): diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/devcore/appobject.rst --- a/doc/book/en/development/devcore/appobject.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/devcore/appobject.rst Fri Jun 19 20:38:32 2009 +0200 @@ -1,5 +1,5 @@ - + The `AppObject` class ~~~~~~~~~~~~~~~~~~~~~ diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/devcore/index.rst --- a/doc/book/en/development/devcore/index.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/devcore/index.rst Fri Jun 19 20:38:32 2009 +0200 @@ -10,7 +10,7 @@ selectors.rst dbapi.rst - + :mod:`Configuration ` ---------------------------------------- diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/devcore/vreg.rst --- a/doc/book/en/development/devcore/vreg.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/devcore/vreg.rst Fri Jun 19 20:38:32 2009 +0200 @@ -16,7 +16,7 @@ .. note:: Once the function `registration_callback(vreg)` is implemented, all the objects need to be explicitly registered as it disables the automatic object registering. - + * suppression de l'ancien système quand il ne restera plus de réference au module registerers dans le code des cubes existants. diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/devrepo/hooks.rst --- a/doc/book/en/development/devrepo/hooks.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/devrepo/hooks.rst Fri Jun 19 20:38:32 2009 +0200 @@ -10,8 +10,8 @@ *Hooks* are executed before or after updating an entity or a relation in the repository. -Their prototypes are as follows: - +Their prototypes are as follows: + * after_add_entity (session, entity) * after_update_entity (session, entity) * after_delete_entity (session, eid) @@ -23,10 +23,10 @@ * after_delete_relation (session, fromeid, rtype, toeid) * before_add_relation (session, fromeid, rtype, toeid) * before_delete_relation (session, fromeid, rtype, toeid) - + * server_startup * server_shutdown - + * session_open * session_close diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/devweb/form.rst --- a/doc/book/en/development/devweb/form.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/devweb/form.rst Fri Jun 19 20:38:32 2009 +0200 @@ -9,9 +9,9 @@ * `vocabulary(rtype, x='subject', limit=None)`, called by the editing views, it returns a list of couples (label, eid) of entities that could be related to the entity by the relation `rtype` - * `subject_relation_vocabulary(rtype, limit=None)`, called internally + * `subject_relation_vocabulary(rtype, limit=None)`, called internally by `vocabulary` in the case of a subject relation - * `object_relation_vocabulary(rtype, limit=None)`, called internally + * `object_relation_vocabulary(rtype, limit=None)`, called internally by `vocabulary` in the case of an object relation * `relation_vocabulary(rtype, targettype, x, limit=None)`, called internally by `subject_relation_vocabulary` and `object_relation_vocabulary` diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/devweb/views.rst --- a/doc/book/en/development/devweb/views.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/devweb/views.rst Fri Jun 19 20:38:32 2009 +0200 @@ -42,19 +42,19 @@ * `dispatch(**context)`, render the view by calling `call` or `cell_call` depending on the given parameters -* `call(**kwargs)`, call the view for a complete result set or null (default +* `call(**kwargs)`, call the view for a complete result set or null (default implementation calls `cell_call()` on each cell of the result set) * `cell_call(row, col, **kwargs)`, call the view for a given cell of a result set * `url()`, returns the URL enabling us to get the view with the current - result set -* `view(__vid, rset, __fallback_vid=None, **kwargs)`, call the view of identifier + result set +* `view(__vid, rset, __fallback_vid=None, **kwargs)`, call the view of identifier `__vid` on the given result set. It is possible to give a view identifier of fallback that will be used if the view requested is not applicable to the result set - + * `wview(__vid, rset, __fallback_vid=None, **kwargs)`, similar to `view` except the flow is automatically passed in the parameters - + * `html_headers()`, returns a list of HTML headers to set by the main template * `page_title()`, returns the title to use in the HTML header `title` @@ -67,17 +67,17 @@ * `EntityView`, view applying to lines or cell containing an entity (e.g. an eid) * `StartupView`, start view that does not require a result set to apply to -* `AnyRsetView`, view applied to any result set +* `AnyRsetView`, view applied to any result set * `EmptyRsetView`, view applied to an empty result set -Examples of views class +Examples of views class ----------------------- - Using `templatable`, `content_type` and HTTP cache configuration .. code-block:: python - + class RSSView(XMLView): id = 'rss' @@ -86,13 +86,13 @@ content_type = 'text/xml' http_cache_manager = MaxAgeHTTPCacheManager cache_max_age = 60*60*2 # stay in http cache for 2 hours by default - + - Using custom selector .. code-block:: python - + class SearchForAssociationView(EntityView): """view called by the edition view when the user asks @@ -111,18 +111,18 @@ We'll show you now an example of a ``primary`` view and how to customize it. -If you want to change the way a ``BlogEntry`` is displayed, just override +If you want to change the way a ``BlogEntry`` is displayed, just override the method ``cell_call()`` of the view ``primary`` in ``BlogDemo/views.py`` :: .. code-block:: python from cubicweb.view import EntityView from cubicweb.selectors import implements - + class BlogEntryPrimaryView(EntityView): id = 'primary' __select__ =implements('Blog') - + def cell_call(self, row, col): entity = self.entity(row, col) self.w(u'

%s

' % entity.title) @@ -131,7 +131,7 @@ self.w(u'

%s

' % entity.text) The above source code defines a new primary view (`line 03`) for -``BlogEntry`` (`line 05`). +``BlogEntry`` (`line 05`). Since views are applied to result sets which can be tables of data, we have to recover the entity from its (row,col)-coordinates (`line 08`). @@ -170,9 +170,9 @@ about the schema and infer that such entities have to be of the ``BlogEntry`` kind and retrieves them. -The request returns a selection of data called a result set. At +The request returns a selection of data called a result set. At `line 10` the view 'primary' is applied to this result set to output -HTML. +HTML. **This is to be compared to interfaces and protocols in object-oriented languages. Applying a given view called 'a_view' to all the entities @@ -202,7 +202,7 @@ * create view "blogentry table" with title, publish_date, category -We will show that by default the view that displays +We will show that by default the view that displays "Any E,D,C WHERE E publish_date D, E category C" is the table view. Of course, the same can be obtained by calling self.wview('table',rset) @@ -226,7 +226,7 @@ * set, through the attribute `content_type` of the class, the MIME type generated by the view to `application/octet-stream` -For views dedicated to binary content creation (like dynamically generated +For views dedicated to binary content creation (like dynamically generated images), we have to set the attribute `binary` of the class to `True` (which implies that `templatable == False`, so that the attribute `w` of the view could be replaced by a binary flow instead of unicode). diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/entityclasses/data-as-objects.rst --- a/doc/book/en/development/entityclasses/data-as-objects.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/entityclasses/data-as-objects.rst Fri Jun 19 20:38:32 2009 +0200 @@ -19,18 +19,18 @@ * `absolute_url(**kwargs)`, returns an absolute URL to access the primary view of an entity - + * `rest_path()`, returns a relative REST URL to get the entity * `format(attr)`, returns the format (MIME type) of the field given un parameter - * `printable_value(attr, value=_marker, attrtype=None, format='text/html')`, + * `printable_value(attr, value=_marker, attrtype=None, format='text/html')`, returns a string enabling the display of an attribute value in a given format (the value is automatically recovered if necessary) :Data handling: - * `as_rset()`, converts the entity into an equivalent result set simulating the + * `as_rset()`, converts the entity into an equivalent result set simulating the request `Any X WHERE X eid _eid_` * `complete(skip_bytes=True)`, executes a request that recovers in one time @@ -57,21 +57,21 @@ * `delete()` allows to delete the entity - + Tne :class:`AnyEntity` class ---------------------------- - + To provide a specific behavior for each entity, we have to define a class inheriting from `cubicweb.entities.AnyEntity`. In general, we define this class in a module of `mycube.entities` package of an application so that it will be available on both server and client side. -The class `AnyEntity` is loaded dynamically from the class `Entity` +The class `AnyEntity` is loaded dynamically from the class `Entity` (`cubciweb.entity`). We define a sub-class to add methods or to specialize the handling of a given entity type The methods defined for `AnyEntity` or `Entity` are the following ones: - + :Standard meta-data (Dublin Core): * `dc_title()`, returns a unicode string corresponding to the meta-data @@ -81,15 +81,15 @@ * `dc_long_title()`, same as dc_title but can return a more detailled title - * `dc_description(format='text/plain')`, returns a unicode string + * `dc_description(format='text/plain')`, returns a unicode string corresponding to the meta-data `Description` (look for a description attribute by default) - * `dc_authors()`, returns a unicode string corresponding to the meta-data + * `dc_authors()`, returns a unicode string corresponding to the meta-data `Authors` (owners by default) - * `dc_date(date_format=None)`, returns a unicode string corresponding to + * `dc_date(date_format=None)`, returns a unicode string corresponding to the meta-data `Date` (update date by default) - * `dc_type(form='')`, returns a string to display the entity type by + * `dc_type(form='')`, returns a string to display the entity type by specifying the preferred form (`plural` for a plural form) diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/entityclasses/load-sort.rst --- a/doc/book/en/development/entityclasses/load-sort.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/entityclasses/load-sort.rst Fri Jun 19 20:38:32 2009 +0200 @@ -14,13 +14,13 @@ `None` if we do not want to sort on the attribute given in the parameter. By default, the entities are sorted according to their creation date. -* The class method `fetch_unrelated_order(attr, var)` is similar to the +* The class method `fetch_unrelated_order(attr, var)` is similar to the method `fetch_order` except that it is essentially used to control - the sorting of drop-down lists enabling relations creation in + the sorting of drop-down lists enabling relations creation in the editing view of an entity. The function `fetch_config(fetchattrs, mainattr=None)` simplifies the -definition of the attributes to load and the sorting by returning a +definition of the attributes to load and the sorting by returning a list of attributes to pre-load (considering automatically the attributes of `AnyEntity`) and a sorting function based on the main attribute (the second parameter if specified otherwisethe first attribute from diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/migration/index.rst --- a/doc/book/en/development/migration/index.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/migration/index.rst Fri Jun 19 20:38:32 2009 +0200 @@ -23,11 +23,11 @@ [_]_.py -in which : +in which : * X.Y.Z is the model version number to which the script enables to migrate. -* *mode* (between the last "_" and the extension ".py") is used for +* *mode* (between the last "_" and the extension ".py") is used for distributed installation. It indicates to which part of the application (RQL server, web server) the script applies. Its value could be : @@ -44,10 +44,10 @@ (schema and data migration for example). Again in the directory `migration`, the file `depends.map` allows to indicate -that for the migration to a particular model version, you always have to first +that for the migration to a particular model version, you always have to first migrate to a particular `CubicWeb` version. This file can contain comments (lines starting by `#`) and a dependancy is listed as follows: :: - + : For example: :: @@ -65,7 +65,7 @@ * `config`, instance configuration * `interactive_mode`, boolean indicating that the script is executed in - an interactive mode or not + an interactive mode or not * `appltemplversion`, application model version of the instance @@ -87,7 +87,7 @@ * `repo_schema`, instance persisting schema (e.g. instance schema of the current migration) -* `newschema`, installed schema on the file system (e.g. schema of +* `newschema`, installed schema on the file system (e.g. schema of the updated model and cubicweb) * `sqlcursor`, SQL cursor for very rare cases where it is really @@ -95,30 +95,30 @@ * `repo`, repository object - + Schema migration ---------------- The following functions for schema migration are available in `repository` scripts: * `add_attribute(etype, attrname, attrtype=None, commit=True)`, adds a new - attribute to an existing entity type. If the attribute type is not specified, + attribute to an existing entity type. If the attribute type is not specified, then it is extracted from the updated schema. - + * `drop_attribute(etype, attrname, commit=True)`, removes an attribute from an existing entity type. * `rename_attribute(etype, oldname, newname, commit=True)`, renames an attribute - + * `add_entity_type(etype, auto=True, commit=True)`, adds a new entity type. If `auto` is True, all the relations using this entity type and having a known entity type on the other hand will automatically be added. -* `drop_entity_type(etype, commit=True)`, removes an entity type and all the +* `drop_entity_type(etype, commit=True)`, removes an entity type and all the relations using it. * `rename_entity_type(oldname, newname, commit=True)`, renames an entity type - + * `add_relation_type(rtype, addrdef=True, commit=True)`, adds a new relation type. If `addrdef` is True, all the relations definitions of this type will be added. @@ -136,17 +136,17 @@ * `synchronize_permissions(ertype, commit=True)`, synchronizes permissions on an entity type or relation type. - + * `synchronize_rschema(rtype, commit=True)`, synchronizes properties and permissions on a relation type. - + * `synchronize_eschema(etype, commit=True)`, synchronizes properties and persmissions on an entity type. - + * `synchronize_schema(commit=True)`, synchronizes the persisting schema with the - updated schema (but without adding or removing new entity types, relations types + updated schema (but without adding or removing new entity types, relations types or even relations definitions). - + * `change_relation_props(subjtype, rtype, objtype, commit=True, **kwargs)`, changes properties of a relation definition by using the named parameters of the properties to change. @@ -162,7 +162,7 @@ The following functions for data migration are available in `repository` scripts: * `rql(rql, kwargs=None, cachekey=None, ask_confirm=True)`, executes an arbitrary RQL - query, either to interrogate or update. A result set object is returned. + query, either to interrogate or update. A result set object is returned. * `add_entity(etype, *args, **kwargs)`, adds a nes entity type of the given type. The attribute and relation values are specified using the named and @@ -176,8 +176,8 @@ * `add_state(name, stateof, initial=False, commit=False, **kwargs)`, adds a new state in the workflow. - -* `add_transition(name, transitionof, fromstates, tostate, requiredgroups=(), commit=False, **kwargs)`, + +* `add_transition(name, transitionof, fromstates, tostate, requiredgroups=(), commit=False, **kwargs)`, adds a new transition in the workflow. You can find more details about workflows in the chapter :ref:`Workflow` . @@ -185,7 +185,7 @@ Configuration migration ----------------------- -The following functions for configuration migration are available in all +The following functions for configuration migration are available in all scripts: * `option_renamed(oldname, newname)`, indicates that an option has been renamed @@ -200,8 +200,8 @@ Others migration functions -------------------------- -Those functions are only used for low level operations that could not be -accomplished otherwise or to repair damaged databases during interactive +Those functions are only used for low level operations that could not be +accomplished otherwise or to repair damaged databases during interactive session. They are available in `repository` scripts: * `sqlexec(sql, args=None, ask_confirm=True)`, executes an arbitrary SQL query diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/testing/index.rst --- a/doc/book/en/development/testing/index.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/testing/index.rst Fri Jun 19 20:38:32 2009 +0200 @@ -28,11 +28,11 @@ Email notifications tests ------------------------- When running tests potentially generated e-mails are not really -sent but is found in the list `MAILBOX` of module `cubicweb.devtools.apptest`. +sent but is found in the list `MAILBOX` of module `cubicweb.devtools.apptest`. This list is reset at each test *setUp* (by the setUp of classes `EnvBasedTC` and `RepositoryBasedTC`). - + You can test your notifications by analyzing the contents of this list, which contains objects with two attributes: * `recipients`, the list of recipients diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/webstdlib/autoform.rst --- a/doc/book/en/development/webstdlib/autoform.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/webstdlib/autoform.rst Fri Jun 19 20:38:32 2009 +0200 @@ -2,7 +2,7 @@ --------------------------------------------------------------- It is possible to manage attributes/relations in the simple or multiple -editing form thanks to the following *rtags*: +editing form thanks to the following *rtags*: * `primary`, indicates that an attribute or a relation has to be inserted **in the simple or multiple editing forms**. In the case of @@ -26,6 +26,6 @@ * `generated`, indicates that an attribute is dynamically computed or other, and that it should not be displayed in the editing form. -If necessary, it is possible to overwrite the method +If necessary, it is possible to overwrite the method `relation_category(rtype, x='subject')` to dynamically compute a relation editing category. diff -r 19861294506f -r cf8f9180e63e doc/book/en/development/webstdlib/basetemplates.rst --- a/doc/book/en/development/webstdlib/basetemplates.rst Fri Jun 19 09:19:27 2009 +0200 +++ b/doc/book/en/development/webstdlib/basetemplates.rst Fri Jun 19 20:38:32 2009 +0200 @@ -32,15 +32,15 @@ Let's now move the search box in the header and remove the login form from the header. We'll show how to move it to the left column of the application. -Let's say we do not want anymore the login menu to be in the header, but we +Let's say we do not want anymore the login menu to be in the header, but we prefer it to be in the left column just below the logo. As the left column is -rendered by ``TheMainTemplate``, we will show how to do it in TheMainTemplate_. +rendered by ``TheMainTemplate``, we will show how to do it in TheMainTemplate_. First, to remove the login menu, we just need to comment out the display of the login component such as follows : :: class MyHTMLPageHeader(HTMLPageHeader): - + def main_header(self, view): """build the top menu with authentification info and the rql box""" self.w(u'\n') @@ -101,13 +101,13 @@ if comp and comp.propval('visible'): comp.dispatch(w=self.w, view=view) self.w(u'') - + # logged user and help #self.w(u'