# HG changeset patch # User Sylvain Thénault # Date 1267809618 -3600 # Node ID ededce6779b5a5e51c6ae28bc75690b804dd1ac5 # Parent 9f9bfbcdecfda3a35cbab9652430ea06dee8072f# Parent a198d6392466266972cc463638d393774688255d merge diff -r a198d6392466 -r ededce6779b5 .hgtags --- a/.hgtags Thu Mar 04 18:57:13 2010 +0100 +++ b/.hgtags Fri Mar 05 18:20:18 2010 +0100 @@ -103,4 +103,5 @@ 450804da3ab2476b7ede0c1f956235b4c239734f cubicweb-version-3.6.0 d2ba93fcb8da95ceab08f48f8149a480215f149c cubicweb-debian-version-3.6.0-1 4ae30c9ca11b1edad67d25b76fce672171d02023 cubicweb-version-3.6.1 +b9cdfe3341d1228687515d9af8686971ad5e6f5c cubicweb-debian-version-3.6.1-1 0a16f07112b90fb61d2e905855fece77e5a7e39c cubicweb-debian-version-3.6.1-2 diff -r a198d6392466 -r ededce6779b5 cwctl.py --- a/cwctl.py Thu Mar 04 18:57:13 2010 +0100 +++ b/cwctl.py Fri Mar 05 18:20:18 2010 +0100 @@ -204,7 +204,7 @@ # simplify constraints if versions: for constraint in versions: - op, ver = constraint.split() + op, ver = constraint if oper is None: oper = op version = ver @@ -238,7 +238,12 @@ for name, constraint in use.items(): self.constraints.setdefault(name,set()) if constraint: - self.constraints[name].add(constraint) + try: + oper, version = constraint.split() + self.constraints[name].add( (oper, version) ) + except: + self.warnings.append('cube %s depends on %s but constraint badly formatted: %s' + % (cube, name, constraint)) self.reverse_constraints.setdefault(name, set()).add(cube) class ListCommand(Command): diff -r a198d6392466 -r ededce6779b5 devtools/__init__.py --- a/devtools/__init__.py Thu Mar 04 18:57:13 2010 +0100 +++ b/devtools/__init__.py Fri Mar 05 18:20:18 2010 +0100 @@ -30,8 +30,8 @@ SYSTEM_RELATIONS = schema.META_RTYPES | set(( # workflow related - 'workflow_of', 'state_of', 'transition_of', 'initial_state', 'allowed_transition', - 'destination_state', 'from_state', 'to_state', + 'workflow_of', 'state_of', 'transition_of', 'initial_state', 'default_workflow', + 'allowed_transition', 'destination_state', 'from_state', 'to_state', 'condition', 'subworkflow', 'subworkflow_state', 'subworkflow_exit', 'custom_workflow', 'in_state', 'wf_info_for', # cwproperty diff -r a198d6392466 -r ededce6779b5 devtools/dataimport.py --- a/devtools/dataimport.py Thu Mar 04 18:57:13 2010 +0100 +++ b/devtools/dataimport.py Fri Mar 05 18:20:18 2010 +0100 @@ -59,10 +59,14 @@ import traceback import os.path as osp from StringIO import StringIO +from copy import copy from logilab.common import shellutils +from logilab.common.date import strptime +from logilab.common.decorators import cached from logilab.common.deprecation import deprecated + def ucsvreader_pb(filepath, encoding='utf-8', separator=',', quote='"', skipfirst=False, withpb=True): """same as ucsvreader but a progress bar is displayed as we iter on rows""" @@ -90,8 +94,6 @@ for row in it: yield [item.decode(encoding) for item in row] -utf8csvreader = deprecated('use ucsvreader instead')(ucsvreader) - def commit_every(nbit, store, it): for i, x in enumerate(it): yield x @@ -129,19 +131,16 @@ assert isinstance(row, dict) assert isinstance(map, list) for src, dest, funcs in map: - assert not (required in funcs and optional in funcs), "optional and required checks are exclusive" + assert not (required in funcs and optional in funcs), \ + "optional and required checks are exclusive" res[dest] = row[src] try: for func in funcs: res[dest] = func(res[dest]) - if res[dest] is None: - raise AssertionError('undetermined value') - except AssertionError, err: - if optional in funcs: - # Forget this field if exception is coming from optional function - del res[dest] - else: - raise AssertionError('error with "%s" field: %s' % (src, err)) + if res[dest] is None: + break + except ValueError, err: + raise ValueError('error with %r field: %s' % (src, err)) return res @@ -178,98 +177,49 @@ return True # silent -# base sanitizing functions #################################################### - -def capitalize_if_unicase(txt): - if txt.isupper() or txt.islower(): - return txt.capitalize() - return txt - -def uppercase(txt): - return txt.upper() - -def lowercase(txt): - return txt.lower() - -def no_space(txt): - return txt.replace(' ','') - -def no_uspace(txt): - return txt.replace(u'\xa0','') - -def no_dash(txt): - return txt.replace('-','') - -def decimal(value): - """cast to float but with comma replacement - - We take care of some locale format as replacing ',' by '.'""" - value = value.replace(',', '.') - try: - return float(value) - except Exception, err: - raise AssertionError(err) - -def integer(value): - try: - return int(value) - except Exception, err: - raise AssertionError(err) - -def strip(txt): - return txt.strip() - -def yesno(value): - """simple heuristic that returns boolean value - - >>> yesno("Yes") - True - >>> yesno("oui") - True - >>> yesno("1") - True - >>> yesno("11") - True - >>> yesno("") - False - >>> yesno("Non") - False - >>> yesno("blablabla") - False - """ - if value: - return value.lower()[0] in 'yo1' - return False - -def isalpha(value): - if value.isalpha(): - return value - raise AssertionError("not all characters in the string alphabetic") +# base sanitizing/coercing functions ########################################### def optional(value): """validation error will not been raised if you add this checker in chain""" - return value + if value: + return value + return None def required(value): - """raise AssertionError is value is empty + """raise ValueError is value is empty This check should be often found in last position in the chain. """ - if bool(value): + if value: return value - raise AssertionError("required") + raise ValueError("required") -@deprecated('use required(value)') -def nonempty(value): - return required(value) +def todatetime(format='%d/%m/%Y'): + """return a transformation function to turn string input value into a + `datetime.datetime` instance, using given format. + + Follow it by `todate` or `totime` functions from `logilab.common.date` if + you want a `date`/`time` instance instead of `datetime`. + """ + def coerce(value): + return strptime(value, format) + return coerce -@deprecated('use integer(value)') -def alldigits(txt): - if txt.isdigit(): - return txt - else: - return u'' +def call_transform_method(methodname, *args, **kwargs): + """return value returned by calling the given method on input""" + def coerce(value): + return getattr(value, methodname)(*args, **kwargs) + return coerce +def call_check_method(methodname, *args, **kwargs): + """check value returned by calling the given method on input is true, + else raise ValueError + """ + def check(value): + if getattr(value, methodname)(*args, **kwargs): + return value + raise ValueError('%s not verified on %r' % (methodname, value)) + return check # base integrity checking functions ############################################ @@ -316,7 +266,7 @@ self.eids[eid] = item self.types.setdefault(type, []).append(eid) - def relate(self, eid_from, rtype, eid_to): + def relate(self, eid_from, rtype, eid_to, inlined=False): """Add new relation (reverse type support is available) >>> 1,2 = eid_from, eid_to @@ -359,14 +309,6 @@ func = lambda x: x[key] self.build_index(name, type, func) - @deprecated('get_many() deprecated. Use fetch() instead') - def get_many(self, name, key): - return self.fetch(name, key, unique=False) - - @deprecated('get_one() deprecated. Use fetch(..., unique=True) instead') - def get_one(self, name, key): - return self.fetch(name, key, unique=True) - def fetch(self, name, key, unique=False, decorator=None): """ decorator is a callable method or an iterator of callable methods (usually a lambda function) @@ -398,6 +340,24 @@ def checkpoint(self): pass + @property + def nb_inserted_entities(self): + return len(self.eids) + @property + def nb_inserted_types(self): + return len(self.types) + @property + def nb_inserted_relations(self): + return len(self.relations) + + @deprecated('[3.6] get_many() deprecated. Use fetch() instead') + def get_many(self, name, key): + return self.fetch(name, key, unique=False) + + @deprecated('[3.6] get_one() deprecated. Use fetch(..., unique=True) instead') + def get_one(self, name, key): + return self.fetch(name, key, unique=True) + class RQLObjectStore(ObjectStore): """ObjectStore that works with an actual RQL repository (production mode)""" @@ -412,19 +372,24 @@ session = session.request() session.set_pool = lambda : None checkpoint = checkpoint or cnx.commit + else: + session.set_pool() self.session = session - self.checkpoint = checkpoint or session.commit + self._checkpoint = checkpoint or session.commit elif checkpoint is not None: - self.checkpoint = checkpoint + self._checkpoint = checkpoint + # XXX .session + + def checkpoint(self): + self._checkpoint() + self.session.set_pool() def rql(self, *args): if self._rql is not None: return self._rql(*args) - self.session.set_pool() return self.session.execute(*args) def create_entity(self, *args, **kwargs): - self.session.set_pool() entity = self.session.create_entity(*args, **kwargs) self.eids[entity.eid] = entity self.types.setdefault(args[0], []).append(entity.eid) @@ -435,7 +400,7 @@ for k in item) return self.rql(query, item)[0][0] - def relate(self, eid_from, rtype, eid_to): + def relate(self, eid_from, rtype, eid_to, inlined=False): # if reverse relation is found, eids are exchanged eid_from, rtype, eid_to = super(RQLObjectStore, self).relate( eid_from, rtype, eid_to) @@ -513,8 +478,10 @@ self.store.checkpoint() nberrors = sum(len(err[1]) for err in self.errors.values()) self.tell('\nImport completed: %i entities, %i types, %i relations and %i errors' - % (len(self.store.eids), len(self.store.types), - len(self.store.relations), nberrors)) + % (self.store.nb_inserted_entities, + self.store.nb_inserted_types, + self.store.nb_inserted_relations, + nberrors)) if self.errors: if self.askerror == 2 or (self.askerror and confirm('Display errors ?')): from pprint import pformat @@ -545,3 +512,241 @@ def iter_and_commit(self, datakey): """iter rows, triggering commit every self.commitevery iterations""" return commit_every(self.commitevery, self.store, self.get_data(datakey)) + + + +from datetime import datetime +from cubicweb.schema import META_RTYPES, VIRTUAL_RTYPES + + +class NoHookRQLObjectStore(RQLObjectStore): + """ObjectStore that works with an actual RQL repository (production mode)""" + _rql = None # bw compat + + def __init__(self, session, metagen=None, baseurl=None): + super(NoHookRQLObjectStore, self).__init__(session) + self.source = session.repo.system_source + self.rschema = session.repo.schema.rschema + self.add_relation = self.source.add_relation + if metagen is None: + metagen = MetaGenerator(session, baseurl) + self.metagen = metagen + self._nb_inserted_entities = 0 + self._nb_inserted_types = 0 + self._nb_inserted_relations = 0 + self.rql = session.unsafe_execute + + def create_entity(self, etype, **kwargs): + for k, v in kwargs.iteritems(): + kwargs[k] = getattr(v, 'eid', v) + entity, rels = self.metagen.base_etype_dicts(etype) + entity = copy(entity) + entity._related_cache = {} + self.metagen.init_entity(entity) + entity.update(kwargs) + session = self.session + self.source.add_entity(session, entity) + self.source.add_info(session, entity, self.source, complete=False) + for rtype, targeteids in rels.iteritems(): + # targeteids may be a single eid or a list of eids + inlined = self.rschema(rtype).inlined + try: + for targeteid in targeteids: + self.add_relation(session, entity.eid, rtype, targeteid, + inlined) + except TypeError: + self.add_relation(session, entity.eid, rtype, targeteids, + inlined) + self._nb_inserted_entities += 1 + return entity + + def relate(self, eid_from, rtype, eid_to): + assert not rtype.startswith('reverse_') + self.add_relation(self.session, eid_from, rtype, eid_to, + self.rschema(rtype).inlined) + self._nb_inserted_relations += 1 + + @property + def nb_inserted_entities(self): + return self._nb_inserted_entities + @property + def nb_inserted_types(self): + return self._nb_inserted_types + @property + def nb_inserted_relations(self): + return self._nb_inserted_relations + + def _put(self, type, item): + raise RuntimeError('use create entity') + + +class MetaGenerator(object): + def __init__(self, session, baseurl=None): + self.session = session + self.source = session.repo.system_source + self.time = datetime.now() + if baseurl is None: + config = session.vreg.config + baseurl = config['base-url'] or config.default_base_url() + if not baseurl[-1] == '/': + baseurl += '/' + self.baseurl = baseurl + # attributes/relations shared by all entities of the same type + self.etype_attrs = [] + self.etype_rels = [] + # attributes/relations specific to each entity + self.entity_attrs = ['eid', 'cwuri'] + #self.entity_rels = [] XXX not handled (YAGNI?) + schema = session.vreg.schema + rschema = schema.rschema + for rtype in META_RTYPES: + if rtype in ('eid', 'cwuri') or rtype in VIRTUAL_RTYPES: + continue + if rschema(rtype).final: + self.etype_attrs.append(rtype) + else: + self.etype_rels.append(rtype) + if not schema._eid_index: + # test schema loaded from the fs + self.gen_is = self.test_gen_is + self.gen_is_instance_of = self.test_gen_is_instanceof + + @cached + def base_etype_dicts(self, etype): + entity = self.session.vreg['etypes'].etype_class(etype)(self.session) + # entity are "surface" copied, avoid shared dict between copies + del entity.cw_extra_kwargs + for attr in self.etype_attrs: + entity[attr] = self.generate(entity, attr) + rels = {} + for rel in self.etype_rels: + rels[rel] = self.generate(entity, rel) + return entity, rels + + def init_entity(self, entity): + for attr in self.entity_attrs: + entity[attr] = self.generate(entity, attr) + entity.eid = entity['eid'] + + def generate(self, entity, rtype): + return getattr(self, 'gen_%s' % rtype)(entity) + + def gen_eid(self, entity): + return self.source.create_eid(self.session) + + def gen_cwuri(self, entity): + return u'%seid/%s' % (self.baseurl, entity['eid']) + + def gen_creation_date(self, entity): + return self.time + def gen_modification_date(self, entity): + return self.time + + def gen_is(self, entity): + return entity.e_schema.eid + def gen_is_instance_of(self, entity): + eids = [] + for etype in entity.e_schema.ancestors() + [entity.e_schema]: + eids.append(entity.e_schema.eid) + return eids + + def gen_created_by(self, entity): + return self.session.user.eid + def gen_owned_by(self, entity): + return self.session.user.eid + + # implementations of gen_is / gen_is_instance_of to use during test where + # schema has been loaded from the fs (hence entity type schema eids are not + # known) + def test_gen_is(self, entity): + from cubicweb.hooks.metadata import eschema_eid + return eschema_eid(self.session, entity.e_schema) + def test_gen_is_instanceof(self, entity): + from cubicweb.hooks.metadata import eschema_eid + eids = [] + for eschema in entity.e_schema.ancestors() + [entity.e_schema]: + eids.append(eschema_eid(self.session, eschema)) + return eids + + +################################################################################ + +utf8csvreader = deprecated('[3.6] use ucsvreader instead')(ucsvreader) + +@deprecated('[3.6] use required') +def nonempty(value): + return required(value) + +@deprecated("[3.6] use call_check_method('isdigit')") +def alldigits(txt): + if txt.isdigit(): + return txt + else: + return u'' + +@deprecated("[3.7] too specific, will move away, copy me") +def capitalize_if_unicase(txt): + if txt.isupper() or txt.islower(): + return txt.capitalize() + return txt + +@deprecated("[3.7] too specific, will move away, copy me") +def yesno(value): + """simple heuristic that returns boolean value + + >>> yesno("Yes") + True + >>> yesno("oui") + True + >>> yesno("1") + True + >>> yesno("11") + True + >>> yesno("") + False + >>> yesno("Non") + False + >>> yesno("blablabla") + False + """ + if value: + return value.lower()[0] in 'yo1' + return False + +@deprecated("[3.7] use call_check_method('isalpha')") +def isalpha(value): + if value.isalpha(): + return value + raise ValueError("not all characters in the string alphabetic") + +@deprecated("[3.7] use call_transform_method('upper')") +def uppercase(txt): + return txt.upper() + +@deprecated("[3.7] use call_transform_method('lower')") +def lowercase(txt): + return txt.lower() + +@deprecated("[3.7] use call_transform_method('replace', ' ', '')") +def no_space(txt): + return txt.replace(' ','') + +@deprecated("[3.7] use call_transform_method('replace', u'\xa0', '')") +def no_uspace(txt): + return txt.replace(u'\xa0','') + +@deprecated("[3.7] use call_transform_method('replace', '-', '')") +def no_dash(txt): + return txt.replace('-','') + +@deprecated("[3.7] use call_transform_method('strip')") +def strip(txt): + return txt.strip() + +@deprecated("[3.7] use call_transform_method('replace', ',', '.'), float") +def decimal(value): + return comma_float(value) + +@deprecated('[3.7] use int builtin') +def integer(value): + return int(value) diff -r a198d6392466 -r ededce6779b5 doc/book/en/B000-development.en.txt --- a/doc/book/en/B000-development.en.txt Thu Mar 04 18:57:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -.. -*- coding: utf-8 -*- - -===================== -Part II - Development -===================== - -This part is about developing web applications with the *CubicWeb* framework. - -.. toctree:: - :maxdepth: 1 - - B0-data-model.en.txt - B1-web-interface.en.txt - B2-repository-customization.en.txt - B3-test.en.txt - B4-advanced.en.txt - - - diff -r a198d6392466 -r ededce6779b5 doc/book/en/B0015-define-permissions.en.txt --- a/doc/book/en/B0015-define-permissions.en.txt Thu Mar 04 18:57:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,208 +0,0 @@ -.. -*- coding: utf-8 -*- - -The security model ------------------- - -The security model of `cubicWeb` is based on `Access Control List`. -The main principles are: - -* users and groups of users -* a user belongs to at least one group of user -* permissions (read, update, create, delete) -* permissions are assigned to groups (and not to users) - -For *CubicWeb* in particular: - -* we associate rights at the enttities/relations schema level -* for each entity, we distinguish four kind of permissions: read, - add, update and delete -* for each relation, we distinguish three king of permissions: read, - add and delete (we can not modify a relation) -* the basic groups are: Administrators, Users and Guests -* by default, users belongs to the group Users -* there is a virtual group called `Owners users` to which we - can associate only deletion and update permissions -* we can not add users to the `Owners users` group, they are - implicetely added to it according to the context of the objects - they own -* the permissions of this group are only be checked on update/deletion - actions if all the other groups the user belongs does not provide - those permissions - - -Permissions definition -`````````````````````` - -Setting permissions is done with the attribute `permissions` of entities and -relation types. It defines a dictionary where the keys are the access types -(action), and the values are the authorized groups or expressions. - -For an entity type, the possible actions are `read`, `add`, `update` and -`delete`. - -For a relation type, the possible actions are `read`, `add`, and `delete`. - -For each access type, a tuple indicates the name of the authorized groups and/or -one or multiple RQL expressions to satisfy to grant access. The access is -provided once the user is in the listed groups or one of the RQL condition is -satisfied. - -The standard groups are : - -* `guests` - -* `users` - -* `managers` - -* `owners` : virtual group corresponding to the entity's owner. - 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 -of the cube (``migration/precreate.py``). - - -Use of RQL expression for writing rights -```````````````````````````````````````` - -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 : - -* you have to use the class `ERQLExpression` - -* the used expression corresponds to the WHERE statement of an RQL query - -* in this expression, the variables X and U are pre-defined references - 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 - object is a any variable, meaning that the user needs to have - permission to execute the action on the entities related - to this variable - -For RQL expressions on a relation type, the principles are the same except -for the following : - -* you have to use the class `RRQLExpression` in the case of a non-final relation - -* in the expression, the variables S, O and U are pre-defined references - to respectively the subject and the object of the current relation (on - which the action is being verified) and the user who executed the query - -* we can also define rights on attributes of an entity (non-final - relation), knowing that : - - - to define RQL expression, we have to use the class - `ERQLExpression` in which X represents the entity the attribute - belongs to - - - the permissions `add` and `delete` are equivalent. Only `add`/`read` - are actually taken in consideration. - -In addition to that the entity type `EPermission` from the standard library -allows to build very complex and dynamic security architecture. The schema of -this entity type is as follow : :: - - class CWPermission(EntityType): - """entity type that may be used to construct some advanced security configuration - """ - permissions = META_ETYPE_PERMS - - name = String(required=True, indexed=True, internationalizable=True, maxsize=100, - description=_('name or identifier of the permission')) - label = String(required=True, internationalizable=True, maxsize=100, - description=_('distinct label to distinguate between other permission entity of the same name')) - require_group = SubjectRelation('CWGroup', - description=_('groups to which the permission is granted')) - - # explicitly add X require_permission CWPermission for each entity that should have - # configurable security - class require_permission(RelationType): - """link a permission to the entity. This permission should be used in the - security definition of the entity's type to be useful. - """ - permissions = { - 'read': ('managers', 'users', 'guests'), - 'add': ('managers',), - 'delete': ('managers',), - } - - class require_group(RelationType): - """used to grant a permission to a group""" - permissions = { - 'read': ('managers', 'users', 'guests'), - 'add': ('managers',), - 'delete': ('managers',), - } - - -Example of configuration :: - - - ... - - class Version(EntityType): - """a version is defining the content of a particular project's release""" - - permissions = {'read': ('managers', 'users', 'guests',), - 'update': ('managers', 'logilab', 'owners',), - 'delete': ('managers', ), - 'add': ('managers', 'logilab', - ERQLExpression('X version_of PROJ, U in_group G,' - 'PROJ require_permission P, P name "add_version",' - 'P require_group G'),)} - - ... - - class version_of(RelationType): - """link a version to its project. A version is necessarily linked to one and only one project. - """ - permissions = {'read': ('managers', 'users', 'guests',), - 'delete': ('managers', ), - 'add': ('managers', 'logilab', - RRQLExpression('O require_permission P, P name "add_version",' - 'U in_group G, P require_group G'),) - } - inlined = True - -This configuration indicates that an entity `CWPermission` named -"add_version" can be associated to a project and provides rights to create -new versions on this project to specific groups. It is important to notice that : - -* in such case, we have to protect both the entity type "Version" and the relation - associating a version to a project ("version_of") - -* because of the genericity of the entity type `CWPermission`, we have to execute - a unification with the groups and/or the states if necessary in the expression - ("U in_group G, P require_group G" in the above example) - -Use of RQL expression for reading rights -```````````````````````````````````````` - -The principles are the same but with the following restrictions : - -* we can not use `RRQLExpression` on relation types for reading - -* special relations "has__permission" can not be used - - -Note on the use of RQL expression for `add` permission -`````````````````````````````````````````````````````` -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 -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. - -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. - diff -r a198d6392466 -r ededce6779b5 doc/book/en/B4040-rss-xml.en.txt --- a/doc/book/en/B4040-rss-xml.en.txt Thu Mar 04 18:57:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -.. -*- coding: utf-8 -*- - -.. _rss: - -RSS Channel ------------ - -Assuming you have several blog entries, click on the title of the -search box in the left column. A larger search box should appear. Enter:: - - Any X ORDERBY D WHERE X is BlogEntry, X creation_date D - -and you get a list of blog entries. - -Click on your login at the top right corner. Chose "user preferences", -then "boxes", then "possible views box" and check "visible = yes" -before validating your changes. - -Enter the same query in the search box and you will see the same list, -plus a box titled "possible views" in the left column. Click on -"entityview", then "RSS". - -You just applied the "RSS" view to the RQL selection you requested. - -That's it, you have a RSS channel for your blog. - -Try again with:: - - Any X ORDERBY D WHERE X is BlogEntry, X creation_date D, - X entry_of B, B title "MyLife" - -Another RSS channel, but a bit more focused. - -A last one for the road:: - - Any C ORDERBY D WHERE C is Comment, C creation_date D LIMIT 15 - -displayed with the RSS view, that's a channel for the last fifteen -comments posted. - -[WRITE ME] - -* show that the RSS view can be used to display an ordered selection - of blog entries, thus providing a RSS channel - -* show that a different selection (by category) means a different channel - - diff -r a198d6392466 -r ededce6779b5 doc/book/en/D060-modules-stdlib.en.txt --- a/doc/book/en/D060-modules-stdlib.en.txt Thu Mar 04 18:57:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -.. -*- coding: utf-8 -*- - -================ -Standard library -================ - -:mod:`cubes.addressbook` -======================== - -.. automodule:: cubes.addressbook - :members: - -:mod:`cubes.basket` -======================== - -.. automodule:: cubes.basket - :members: - -:mod:`cubes.blog` -======================== - -.. automodule:: cubes.blog - :members: - -:mod:`cubes.book` -======================== - -.. automodule:: cubes.book - :members: - -:mod:`cubes.comment` -======================== - -.. automodule:: cubes.comment - :members: - -:mod:`cubes.company` -======================== - -.. automodule:: cubes.company - :members: - - -:mod:`cubes.conference` -======================== - -.. automodule:: cubes.conference - :members: - -:mod:`cubes.email` -======================== - -.. automodule:: cubes.email - :members: - -:mod:`cubes.event` -======================== - -.. automodule:: cubes.event - :members: - -:mod:`cubes.expense` -======================== - -.. automodule:: cubes.expense - :members: - - -:mod:`cubes.file` -======================== - -.. automodule:: cubes.file - :members: - -:mod:`cubes.folder` -======================== - -.. automodule:: cubes.folder - :members: - -:mod:`cubes.i18ncontent` -======================== - -.. automodule:: cubes.i18ncontent - :members: - -:mod:`cubes.invoice` -======================== - -.. automodule:: cubes.invoice - :members: - -:mod:`cubes.keyword` -======================== - -.. automodule:: cubes.keyword - :members: - -:mod:`cubes.link` -======================== - -.. automodule:: cubes.link - :members: - -:mod:`cubes.mailinglist` -======================== - -.. automodule:: cubes.mailinglist - :members: - -:mod:`cubes.person` -======================== - -.. automodule:: cubes.person - :members: - -:mod:`cubes.shopcart` -======================== - -.. automodule:: cubes.shopcart - :members: - -:mod:`cubes.skillmat` -======================== - -.. automodule:: cubes.skillmat - :members: - -:mod:`cubes.tag` -======================== - -.. automodule:: cubes.tag - :members: - -:mod:`cubes.task` -======================== - -.. automodule:: cubes.task - :members: - -:mod:`cubes.workcase` -======================== - -.. automodule:: cubes.workcase - :members: - -:mod:`cubes.workorder` -======================== - -.. automodule:: cubes.workorder - :members: - -:mod:`cubes.zone` -======================== - -.. automodule:: cubes.zone - :members: - diff -r a198d6392466 -r ededce6779b5 doc/book/en/D070-modules-cbw-api.en.txt --- a/doc/book/en/D070-modules-cbw-api.en.txt Thu Mar 04 18:57:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1961 +0,0 @@ -.. -*- coding: utf-8 -*- - -============ -CubicWeb API -============ - -:mod:`cubicweb.hercule` -======================= - -.. automodule:: cubicweb.hercule - :members: - -:mod:`cubicweb.cwctl` -===================== - -.. automodule:: cubicweb.cwctl - :members: - -:mod:`cubicweb.schema` -====================== - -.. automodule:: cubicweb.schema - :members: - -:mod:`cubicweb.cwconfig` -======================== - -.. automodule:: cubicweb.cwconfig - :members: - -:mod:`cubicweb.schemaviewer` -============================ - -.. automodule:: cubicweb.schemaviewer - :members: - -:mod:`cubicweb._exceptions` -=========================== - -.. automodule:: cubicweb._exceptions - :members: - -:mod:`cubicweb.dbapi` -===================== - -.. automodule:: cubicweb.dbapi - :members: - -:mod:`cubicweb.toolsutils` -========================== - -.. automodule:: cubicweb.toolsutils - :members: - -:mod:`cubicweb.cwvreg` -====================== - -.. automodule:: cubicweb.cwvreg - :members: - -:mod:`cubicweb.md5crypt` -======================== - -.. automodule:: cubicweb.md5crypt - :members: - -:mod:`cubicweb.rset` -==================== - -.. automodule:: cubicweb.rset - :members: - -:mod:`cubicweb` -=============== - -.. automodule:: cubicweb - :members: - -:mod:`cubicweb.setup` -===================== - -.. automodule:: cubicweb.setup - :members: - -:mod:`cubicweb.gettext` -======================= - -.. automodule:: cubicweb.gettext - :members: - -:mod:`cubicweb.interfaces` -========================== - -.. automodule:: cubicweb.interfaces - :members: - -:mod:`cubicweb.vregistry` -========================= - -.. automodule:: cubicweb.vregistry - :members: - -:mod:`cubicweb.web.httpcache` -============================= - -.. automodule:: cubicweb.web.httpcache - :members: - -:mod:`cubicweb.web.webconfig` -============================= - -.. automodule:: cubicweb.web.webconfig - :members: - -:mod:`cubicweb.web.request` -=========================== - -.. automodule:: cubicweb.web.request - :members: - -:mod:`cubicweb.web._exceptions` -=============================== - -.. automodule:: cubicweb.web._exceptions - :members: - -:mod:`cubicweb.web.webctl` -========================== - -.. automodule:: cubicweb.web.webctl - :members: - -:mod:`cubicweb.web.application` -=============================== - -.. automodule:: cubicweb.web.application - :members: - -:mod:`cubicweb.web.controller` -============================== - -.. automodule:: cubicweb.web.controller - :members: - -:mod:`cubicweb.web.widgets` -=========================== - -.. automodule:: cubicweb.web.widgets - :members: - -:mod:`cubicweb.web.htmlwidgets` -=============================== - -.. automodule:: cubicweb.web.htmlwidgets - :members: - -:mod:`cubicweb.web` -=================== - -.. automodule:: cubicweb.web - :members: - -:mod:`cubicweb.web.form` -======================== - -.. automodule:: cubicweb.web.form - :members: - -:mod:`cubicweb.web.box` -======================= - -.. automodule:: cubicweb.web.box - :members: - -:mod:`cubicweb.web.component` -============================= - -.. automodule:: cubicweb.web.component - :members: - -:mod:`cubicweb.web.action` -========================== - -.. automodule:: cubicweb.web.action - :members: - -:mod:`cubicweb.web.facet` -========================= - -.. automodule:: cubicweb.web.facet - :members: - -:mod:`cubicweb.web.views.plots` -=============================== - -.. automodule:: cubicweb.web.views.plots - :members: - -:mod:`cubicweb.web.views.error` -=============================== - -.. automodule:: cubicweb.web.views.error - :members: - -:mod:`cubicweb.web.views.magicsearch` -===================================== - -.. automodule:: cubicweb.web.views.magicsearch - :members: - -:mod:`cubicweb.web.views.basetemplates` -======================================= - -.. automodule:: cubicweb.web.views.basetemplates - :members: - -:mod:`cubicweb.web.views.idownloadable` -======================================= - -.. automodule:: cubicweb.web.views.idownloadable - :members: - -:mod:`cubicweb.web.views.ajaxedit` -================================== - -.. automodule:: cubicweb.web.views.ajaxedit - :members: - -:mod:`cubicweb.web.views.wfentities` -==================================== - -.. automodule:: cubicweb.web.views.wfentities - :members: - -:mod:`cubicweb.web.views.navigation` -==================================== - -.. automodule:: cubicweb.web.views.navigation - :members: - -:mod:`cubicweb.web.views.schemaentities` -======================================== - -.. automodule:: cubicweb.web.views.schemaentities - :members: - -:mod:`cubicweb.web.views.treeview` -================================== - -.. automodule:: cubicweb.web.views.treeview - :members: - -:mod:`cubicweb.web.views.startup` -================================= - -.. automodule:: cubicweb.web.views.startup - :members: - -:mod:`cubicweb.web.views.iprogress` -=================================== - -.. automodule:: cubicweb.web.views.iprogress - :members: - -:mod:`cubicweb.web.views.euser` -=============================== - -.. automodule:: cubicweb.web.views.euser - :members: - -:mod:`cubicweb.web.views.facets` -================================ - -.. automodule:: cubicweb.web.views.facets - :members: - -:mod:`cubicweb.web.views.emailaddress` -====================================== - -.. automodule:: cubicweb.web.views.emailaddress - :members: - -:mod:`cubicweb.web.views.sessions` -================================== - -.. automodule:: cubicweb.web.views.sessions - :members: - -:mod:`cubicweb.web.views.timetable` -=================================== - -.. automodule:: cubicweb.web.views.timetable - :members: - -:mod:`cubicweb.web.views.timeline` -================================== - -.. automodule:: cubicweb.web.views.timeline - :members: - -:mod:`cubicweb.web.views.baseviews` -=================================== - -.. automodule:: cubicweb.web.views.baseviews - :members: - -:mod:`cubicweb.web.views.boxes` -=============================== - -.. automodule:: cubicweb.web.views.boxes - :members: - -:mod:`cubicweb.web.views.old_calendar` -====================================== - -.. automodule:: cubicweb.web.views.old_calendar - :members: - -:mod:`cubicweb.web.views.card` -============================== - -.. automodule:: cubicweb.web.views.card - :members: - -:mod:`cubicweb.web.views.ibreadcrumbs` -====================================== - -.. automodule:: cubicweb.web.views.ibreadcrumbs - :members: - -:mod:`cubicweb.web.views.basecontrollers` -========================================= - -.. automodule:: cubicweb.web.views.basecontrollers - :members: - -:mod:`cubicweb.web.views.embedding` -=================================== - -.. automodule:: cubicweb.web.views.embedding - :members: - -:mod:`cubicweb.web.views.actions` -================================= - -.. automodule:: cubicweb.web.views.actions - :members: - -:mod:`cubicweb.web.views.editcontroller` -======================================== - -.. automodule:: cubicweb.web.views.editcontroller - :members: - -:mod:`cubicweb.web.views.debug` -=============================== - -.. automodule:: cubicweb.web.views.debug - :members: - -:mod:`cubicweb.web.views.urlpublishing` -======================================= - -.. automodule:: cubicweb.web.views.urlpublishing - :members: - -:mod:`cubicweb.web.views.baseforms` -=================================== - -.. automodule:: cubicweb.web.views.baseforms - :members: - -:mod:`cubicweb.web.views.urlrewrite` -==================================== - -.. automodule:: cubicweb.web.views.urlrewrite - :members: - -:mod:`cubicweb.web.views.massmailing` -===================================== - -.. automodule:: cubicweb.web.views.massmailing - :members: - -:mod:`cubicweb.web.views` -========================= - -.. automodule:: cubicweb.web.views - :members: - -:mod:`cubicweb.web.views.eproperties` -===================================== - -.. automodule:: cubicweb.web.views.eproperties - :members: - -:mod:`cubicweb.web.views.tabs` -============================== - -.. automodule:: cubicweb.web.views.tabs - :members: - -:mod:`cubicweb.web.views.vcard` -=============================== - -.. automodule:: cubicweb.web.views.vcard - :members: - -:mod:`cubicweb.web.views.wdoc` -============================== - -.. automodule:: cubicweb.web.views.wdoc - :members: - -:mod:`cubicweb.web.views.authentication` -======================================== - -.. automodule:: cubicweb.web.views.authentication - :members: - -:mod:`cubicweb.web.views.tableview` -=================================== - -.. automodule:: cubicweb.web.views.tableview - :members: - -:mod:`cubicweb.web.views.management` -==================================== - -.. automodule:: cubicweb.web.views.management - :members: - -:mod:`cubicweb.web.views.igeocodable` -===================================== - -.. automodule:: cubicweb.web.views.igeocodable - :members: - -:mod:`cubicweb.web.views.xbel` -============================== - -.. automodule:: cubicweb.web.views.xbel - :members: - -:mod:`cubicweb.web.views.bookmark` -================================== - -.. automodule:: cubicweb.web.views.bookmark - :members: - -:mod:`cubicweb.web.views.apacherewrite` -======================================= - -.. automodule:: cubicweb.web.views.apacherewrite - :members: - -:mod:`cubicweb.web.views.dynimages` -=================================== - -.. automodule:: cubicweb.web.views.dynimages - :members: - -:mod:`cubicweb.web.views.searchrestriction` -=========================================== - -.. automodule:: cubicweb.web.views.searchrestriction - :members: - -:mod:`cubicweb.web.views.basecomponents` -======================================== - -.. automodule:: cubicweb.web.views.basecomponents - :members: - -:mod:`cubicweb.web.views.calendar` -================================== - -.. automodule:: cubicweb.web.views.calendar - :members: - -:mod:`cubicweb.sobjects.supervising` -==================================== - -.. automodule:: cubicweb.sobjects.supervising - :members: - -:mod:`cubicweb.sobjects.hooks` -============================== - -.. automodule:: cubicweb.sobjects.hooks - :members: - -:mod:`cubicweb.sobjects.email` -============================== - -.. automodule:: cubicweb.sobjects.email - :members: - -:mod:`cubicweb.sobjects` -======================== - -.. automodule:: cubicweb.sobjects - :members: - -:mod:`cubicweb.sobjects.notification` -===================================== - -.. automodule:: cubicweb.sobjects.notification - :members: - -:mod:`cubicweb.wsgi.request` -============================ - -.. automodule:: cubicweb.wsgi.request - :members: - -:mod:`cubicweb.wsgi` -==================== - -.. automodule:: cubicweb.wsgi - :members: - -:mod:`cubicweb.wsgi.handler` -============================ - -.. automodule:: cubicweb.wsgi.handler - :members: - -:mod:`cubicweb.etwist.server` -============================= - -.. automodule:: cubicweb.etwist.server - :members: - -:mod:`cubicweb.etwist.request` -============================== - -.. automodule:: cubicweb.etwist.request - :members: - -:mod:`cubicweb.etwist.twconfig` -=============================== - -.. automodule:: cubicweb.etwist.twconfig - :members: - -:mod:`cubicweb.etwist` -====================== - -.. automodule:: cubicweb.etwist - :members: - -:mod:`cubicweb.etwist.twctl` -============================ - -.. automodule:: cubicweb.etwist.twctl - :members: - -:mod:`cubicweb.goa.goaconfig` -============================= - -.. automodule:: cubicweb.goa.goaconfig - :members: - -:mod:`cubicweb.goa.rqlinterpreter` -================================== - -.. automodule:: cubicweb.goa.rqlinterpreter - :members: - -:mod:`cubicweb.goa.dbmyams` -=========================== - -.. automodule:: cubicweb.goa.dbmyams - :members: - -:mod:`cubicweb.goa.db` -====================== - -.. automodule:: cubicweb.goa.db - :members: - -:mod:`cubicweb.goa.goactl` -========================== - -.. automodule:: cubicweb.goa.goactl - :members: - -:mod:`cubicweb.goa.goavreg` -=========================== - -.. automodule:: cubicweb.goa.goavreg - :members: - -:mod:`cubicweb.goa` -=================== - -.. automodule:: cubicweb.goa - :members: - -:mod:`cubicweb.goa.gaesource` -============================= - -.. automodule:: cubicweb.goa.gaesource - :members: - -:mod:`cubicweb.goa.dbinit` -========================== - -.. automodule:: cubicweb.goa.dbinit - :members: - -:mod:`cubicweb.goa.testlib` -=========================== - -.. automodule:: cubicweb.goa.testlib - :members: - -:mod:`cubicweb.goa.appobjects.dbmgmt` -===================================== - -.. automodule:: cubicweb.goa.appobjects.dbmgmt - :members: - -:mod:`cubicweb.goa.appobjects.gauthservice` -=========================================== - -.. automodule:: cubicweb.goa.appobjects.gauthservice - :members: - -:mod:`cubicweb.goa.appobjects.sessions` -======================================= - -.. automodule:: cubicweb.goa.appobjects.sessions - :members: - -:mod:`cubicweb.goa.appobjects` -============================== - -.. automodule:: cubicweb.goa.appobjects - :members: - -:mod:`cubicweb.goa.appobjects.components` -========================================= - -.. automodule:: cubicweb.goa.appobjects.components - :members: - -:mod:`cubicweb.goa.tools.laxctl` -================================ - -.. automodule:: cubicweb.goa.tools.laxctl - :members: - -:mod:`cubicweb.goa.tools.generate_schema_img` -============================================= - -.. automodule:: cubicweb.goa.tools.generate_schema_img - :members: - -:mod:`cubicweb.goa.tools` -========================= - -.. automodule:: cubicweb.goa.tools - :members: - -:mod:`cubicweb.goa.tools.i18n` -============================== - -.. automodule:: cubicweb.goa.tools.i18n - :members: - -:mod:`cubicweb.goa.overrides.mttransforms` -========================================== - -.. automodule:: cubicweb.goa.overrides.mttransforms - :members: - -:mod:`cubicweb.goa.overrides.rqlannotation` -=========================================== - -.. automodule:: cubicweb.goa.overrides.rqlannotation - :members: - -:mod:`cubicweb.goa.overrides.toolsutils` -======================================== - -.. automodule:: cubicweb.goa.overrides.toolsutils - :members: - -:mod:`cubicweb.goa.overrides` -============================= - -.. automodule:: cubicweb.goa.overrides - :members: - -:mod:`cubicweb.goa.overrides.server__init__` -============================================ - -.. automodule:: cubicweb.goa.overrides.server__init__ - :members: - -:mod:`cubicweb.goa.overrides.server_utils` -========================================== - -.. automodule:: cubicweb.goa.overrides.server_utils - :members: - -:mod:`cubicweb.common.mttransforms` -=================================== - -.. automodule:: cubicweb.common.mttransforms - :members: - -:mod:`cubicweb.common.utils` -============================ - -.. automodule:: cubicweb.common.utils - :members: - -:mod:`cubicweb.common.schema` -============================= - -.. automodule:: cubicweb.common.schema - :members: - -:mod:`cubicweb.common.tal` -========================== - -.. automodule:: cubicweb.common.tal - :members: - -:mod:`cubicweb.common.appobject` -================================ - -.. automodule:: cubicweb.common.appobject - :members: - -:mod:`cubicweb.common.migration` -================================ - -.. automodule:: cubicweb.common.migration - :members: - -:mod:`cubicweb.common.rest` -=========================== - -.. automodule:: cubicweb.common.rest - :members: - -:mod:`cubicweb.common.html4zope` -================================ - -.. automodule:: cubicweb.common.html4zope - :members: - -:mod:`cubicweb.common.view` -=========================== - -.. automodule:: cubicweb.common.view - :members: - -:mod:`cubicweb.common.selectors` -================================ - -.. automodule:: cubicweb.common.selectors - :members: - -:mod:`cubicweb.common.entity` -============================= - -.. automodule:: cubicweb.common.entity - :members: - -:mod:`cubicweb.common.mail` -=========================== - -.. automodule:: cubicweb.common.mail - :members: - -:mod:`cubicweb.common.mixins` -============================= - -.. automodule:: cubicweb.common.mixins - :members: - -:mod:`cubicweb.common` -====================== - -.. automodule:: cubicweb.common - :members: - -:mod:`cubicweb.common.uilib` -============================ - -.. automodule:: cubicweb.common.uilib - :members: - -:mod:`cubicweb.common.registerers` -================================== - -.. automodule:: cubicweb.common.registerers - :members: - -:mod:`cubicweb.common.i18n` -=========================== - -.. automodule:: cubicweb.common.i18n - :members: - -:mod:`cubicweb.entities.schemaobjs` -=================================== - -.. automodule:: cubicweb.entities.schemaobjs - :members: - -:mod:`cubicweb.entities.wfobjs` -=============================== - -.. automodule:: cubicweb.entities.wfobjs - :members: - -:mod:`cubicweb.entities` -======================== - -.. automodule:: cubicweb.entities - :members: - -:mod:`cubicweb.entities.authobjs` -================================= - -.. automodule:: cubicweb.entities.authobjs - :members: - -:mod:`cubicweb.entities.lib` -============================ - -.. automodule:: cubicweb.entities.lib - :members: - -:mod:`cubicweb.server.server` -============================= - -.. automodule:: cubicweb.server.server - :members: - -:mod:`cubicweb.server.utils` -============================ - -.. automodule:: cubicweb.server.utils - :members: - -:mod:`cubicweb.server.checkintegrity` -===================================== - -.. automodule:: cubicweb.server.checkintegrity - :members: - -:mod:`cubicweb.server.rqlrewrite` -================================= - -.. automodule:: cubicweb.server.rqlrewrite - :members: - -:mod:`cubicweb.server.rqlannotation` -==================================== - -.. automodule:: cubicweb.server.rqlannotation - :members: - -:mod:`cubicweb.server.hooks` -============================ - -.. automodule:: cubicweb.server.hooks - :members: - -:mod:`cubicweb.server.hooksmanager` -=================================== - -.. automodule:: cubicweb.server.hooksmanager - :members: - -:mod:`cubicweb.server.securityhooks` -==================================== - -.. automodule:: cubicweb.server.securityhooks - :members: - -:mod:`cubicweb.server.schemahooks` -================================== - -.. automodule:: cubicweb.server.schemahooks - :members: - -:mod:`cubicweb.server.session` -============================== - -.. automodule:: cubicweb.server.session - :members: - -:mod:`cubicweb.server.serverctl` -================================ - -.. automodule:: cubicweb.server.serverctl - :members: - -:mod:`cubicweb.server.serverconfig` -=================================== - -.. automodule:: cubicweb.server.serverconfig - :members: - -:mod:`cubicweb.server.pool` -=========================== - -.. automodule:: cubicweb.server.pool - :members: - -:mod:`cubicweb.server.mssteps` -============================== - -.. automodule:: cubicweb.server.mssteps - :members: - -:mod:`cubicweb.server.hookhelper` -================================= - -.. automodule:: cubicweb.server.hookhelper - :members: - -:mod:`cubicweb.server` -====================== - -.. automodule:: cubicweb.server - :members: - -:mod:`cubicweb.server.sqlutils` -=============================== - -.. automodule:: cubicweb.server.sqlutils - :members: - -:mod:`cubicweb.server.schemaserial` -=================================== - -.. automodule:: cubicweb.server.schemaserial - :members: - -:mod:`cubicweb.server.repository` -================================= - -.. automodule:: cubicweb.server.repository - :members: - -:mod:`cubicweb.server.ssplanner` -================================ - -.. automodule:: cubicweb.server.ssplanner - :members: - -:mod:`cubicweb.server.msplanner` -================================ - -.. automodule:: cubicweb.server.msplanner - :members: - -:mod:`cubicweb.server.querier` -============================== - -.. automodule:: cubicweb.server.querier - :members: - -:mod:`cubicweb.server.migractions` -================================== - -.. automodule:: cubicweb.server.migractions - :members: - -:mod:`cubicweb.server.sources.rql2sql` -====================================== - -.. automodule:: cubicweb.server.sources.rql2sql - :members: - -:mod:`cubicweb.server.sources.ldapuser` -======================================= - -.. automodule:: cubicweb.server.sources.ldapuser - :members: - -:mod:`cubicweb.server.sources` -============================== - -.. automodule:: cubicweb.server.sources - :members: - -:mod:`cubicweb.server.sources.pyrorql` -====================================== - -.. automodule:: cubicweb.server.sources.pyrorql - :members: - -:mod:`cubicweb.server.sources.native` -===================================== - -.. automodule:: cubicweb.server.sources.native - :members: - -:mod:`cubicweb.server.sources.extlite` -====================================== - -.. automodule:: cubicweb.server.sources.extlite - :members: - -:mod:`cubicweb.devtools.devctl` -=============================== - -.. automodule:: cubicweb.devtools.devctl - :members: - -:mod:`cubicweb.devtools.pkginfo` -================================ - -.. automodule:: cubicweb.devtools.pkginfo - :members: - -:mod:`cubicweb.devtools.migrtest` -================================= - -.. automodule:: cubicweb.devtools.migrtest - :members: - -:mod:`cubicweb.devtools.htmlparser` -=================================== - -.. automodule:: cubicweb.devtools.htmlparser - :members: - -:mod:`cubicweb.devtools` -======================== - -.. automodule:: cubicweb.devtools - :members: - -:mod:`cubicweb.devtools.fill` -============================= - -.. automodule:: cubicweb.devtools.fill - :members: - -:mod:`cubicweb.devtools._apptest` -================================= - -.. automodule:: cubicweb.devtools._apptest - :members: - -:mod:`cubicweb.devtools.stresstester` -===================================== - -.. automodule:: cubicweb.devtools.stresstester - :members: - -:mod:`cubicweb.devtools.fake` -============================= - -.. automodule:: cubicweb.devtools.fake - :members: - -:mod:`cubicweb.devtools.apptest` -================================ - -.. automodule:: cubicweb.devtools.apptest - :members: - -:mod:`cubicweb.devtools.livetest` -================================= - -.. automodule:: cubicweb.devtools.livetest - :members: - -:mod:`cubicweb.devtools.testlib` -================================ - -.. automodule:: cubicweb.devtools.testlib - :members: - -:mod:`cubicweb.devtools.repotest` -================================= - -.. automodule:: cubicweb.devtools.repotest - :members: - -:mod:`cubicweb.devtools.cwtwill` -================================ - -.. automodule:: cubicweb.devtools.cwtwill - :members: - -:mod:`cubicweb.misc.cwdesklets.rqlsensor` -========================================= - -.. automodule:: cubicweb.misc.cwdesklets.rqlsensor - :members: - -:mod:`cubicweb.embedded.mx` -=========================== - -.. automodule:: cubicweb.embedded.mx - :members: - -:mod:`cubicweb.embedded.mx.DateTime.mxDateTime_python` -====================================================== - -.. automodule:: cubicweb.embedded.mx.DateTime.mxDateTime_python - :members: - -:mod:`cubicweb.embedded.mx.DateTime.ARPA` -========================================= - -.. automodule:: cubicweb.embedded.mx.DateTime.ARPA - :members: - -:mod:`cubicweb.embedded.mx.DateTime.ISO` -======================================== - -.. automodule:: cubicweb.embedded.mx.DateTime.ISO - :members: - -:mod:`cubicweb.embedded.mx.DateTime.Parser` -=========================================== - -.. automodule:: cubicweb.embedded.mx.DateTime.Parser - :members: - -:mod:`cubicweb.embedded.mx.DateTime` -==================================== - -.. automodule:: cubicweb.embedded.mx.DateTime - :members: - -:mod:`cubicweb.embedded.mx.DateTime.Timezone` -============================================= - -.. automodule:: cubicweb.embedded.mx.DateTime.Timezone - :members: - -:mod:`cubicweb.embedded.mx.DateTime.DateTime` -============================================= - -.. automodule:: cubicweb.embedded.mx.DateTime.DateTime - :members: - -:mod:`indexer` -============== - -.. automodule:: indexer - :members: - -:mod:`indexer.indexable_objects` -================================ - -.. automodule:: indexer.indexable_objects - :members: - -:mod:`indexer.search` -===================== - -.. automodule:: indexer.search - :members: - -:mod:`indexer.query_objects` -============================ - -.. automodule:: indexer.query_objects - :members: - -:mod:`indexer._exceptions` -========================== - -.. automodule:: indexer._exceptions - :members: - -:mod:`indexer.setup` -==================== - -.. automodule:: indexer.setup - :members: - -:mod:`indexer.query` -==================== - -.. automodule:: indexer.query - :members: - -:mod:`logilab` -============== - -.. automodule:: logilab - :members: - -:mod:`logilab.constraint.propagation` -===================================== - -.. automodule:: logilab.constraint.propagation - :members: - -:mod:`logilab.constraint.psyco_wrapper` -======================================= - -.. automodule:: logilab.constraint.psyco_wrapper - :members: - -:mod:`logilab.constraint.fd` -============================ - -.. automodule:: logilab.constraint.fd - :members: - -:mod:`logilab.constraint.fi` -============================ - -.. automodule:: logilab.constraint.fi - :members: - -:mod:`logilab.constraint` -========================= - -.. automodule:: logilab.constraint - :members: - -:mod:`logilab.constraint.setup` -=============================== - -.. automodule:: logilab.constraint.setup - :members: - -:mod:`logilab.constraint.interfaces` -==================================== - -.. automodule:: logilab.constraint.interfaces - :members: - -:mod:`logilab.constraint.distributors` -====================================== - -.. automodule:: logilab.constraint.distributors - :members: - -:mod:`logilab.common.clcommands` -================================ - -.. automodule:: logilab.common.clcommands - :members: - -:mod:`logilab.common.table` -=========================== - -.. automodule:: logilab.common.table - :members: - -:mod:`logilab.common.interface` -=============================== - -.. automodule:: logilab.common.interface - :members: - -:mod:`logilab.common.logger` -============================ - -.. automodule:: logilab.common.logger - :members: - -:mod:`logilab.common.cli` -========================= - -.. automodule:: logilab.common.cli - :members: - -:mod:`logilab.common.xmlrpcutils` -================================= - -.. automodule:: logilab.common.xmlrpcutils - :members: - -:mod:`logilab.common.corbautils` -================================ - -.. automodule:: logilab.common.corbautils - :members: - -:mod:`logilab.common.cache` -=========================== - -.. automodule:: logilab.common.cache - :members: - -:mod:`logilab.common.astutils` -============================== - -.. automodule:: logilab.common.astutils - :members: - -:mod:`logilab.common.daemon` -============================ - -.. automodule:: logilab.common.daemon - :members: - -:mod:`logilab.common.tree` -========================== - -.. automodule:: logilab.common.tree - :members: - -:mod:`logilab.common.textutils` -=============================== - -.. automodule:: logilab.common.textutils - :members: - -:mod:`logilab.common.modutils` -============================== - -.. automodule:: logilab.common.modutils - :members: - -:mod:`logilab.common.fileutils` -=============================== - -.. automodule:: logilab.common.fileutils - :members: - -:mod:`logilab.common.patricia` -============================== - -.. automodule:: logilab.common.patricia - :members: - -:mod:`logilab.common.date` -========================== - -.. automodule:: logilab.common.date - :members: - -:mod:`logilab.common.optparser` -=============================== - -.. automodule:: logilab.common.optparser - :members: - -:mod:`logilab.common.twisted_distutils` -======================================= - -.. automodule:: logilab.common.twisted_distutils - :members: - -:mod:`logilab.common.decorators` -================================ - -.. automodule:: logilab.common.decorators - :members: - -:mod:`logilab.common.db` -======================== - -.. automodule:: logilab.common.db - :members: - -:mod:`logilab.common.deprecation` -================================= - -.. automodule:: logilab.common.deprecation - :members: - -:mod:`logilab.common.tasksqueue` -================================ - -.. automodule:: logilab.common.tasksqueue - :members: - -:mod:`logilab.common.changelog` -=============================== - -.. automodule:: logilab.common.changelog - :members: - -:mod:`logilab.common.shellutils` -================================ - -.. automodule:: logilab.common.shellutils - :members: - -:mod:`logilab.common.sqlgen` -============================ - -.. automodule:: logilab.common.sqlgen - :members: - -:mod:`logilab.common.optik_ext` -=============================== - -.. automodule:: logilab.common.optik_ext - :members: - -:mod:`logilab.common.configuration` -=================================== - -.. automodule:: logilab.common.configuration - :members: - -:mod:`logilab.common.visitor` -============================= - -.. automodule:: logilab.common.visitor - :members: - -:mod:`logilab.common.pytest` -============================ - -.. automodule:: logilab.common.pytest - :members: - -:mod:`logilab.common` -===================== - -.. automodule:: logilab.common - :members: - -:mod:`logilab.common.setup` -=========================== - -.. automodule:: logilab.common.setup - :members: - -:mod:`logilab.common.logservice` -================================ - -.. automodule:: logilab.common.logservice - :members: - -:mod:`logilab.common.debugger` -============================== - -.. automodule:: logilab.common.debugger - :members: - -:mod:`logilab.common.html` -========================== - -.. automodule:: logilab.common.html - :members: - -:mod:`logilab.common.vcgutils` -============================== - -.. automodule:: logilab.common.vcgutils - :members: - -:mod:`logilab.common.compat` -============================ - -.. automodule:: logilab.common.compat - :members: - -:mod:`logilab.common.logging_ext` -================================= - -.. automodule:: logilab.common.logging_ext - :members: - -:mod:`logilab.common.umessage` -============================== - -.. automodule:: logilab.common.umessage - :members: - -:mod:`logilab.common.proc` -========================== - -.. automodule:: logilab.common.proc - :members: - -:mod:`logilab.common.monclient` -=============================== - -.. automodule:: logilab.common.monclient - :members: - -:mod:`logilab.common.bind` -========================== - -.. automodule:: logilab.common.bind - :members: - -:mod:`logilab.common.graph` -=========================== - -.. automodule:: logilab.common.graph - :members: - -:mod:`logilab.common.testlib` -============================= - -.. automodule:: logilab.common.testlib - :members: - -:mod:`logilab.common.contexts` -============================== - -.. automodule:: logilab.common.contexts - :members: - -:mod:`logilab.common.adbh` -========================== - -.. automodule:: logilab.common.adbh - :members: - -:mod:`logilab.common.pdf_ext` -============================= - -.. automodule:: logilab.common.pdf_ext - :members: - -:mod:`logilab.common.monserver` -=============================== - -.. automodule:: logilab.common.monserver - :members: - -:mod:`logilab.common.ureports.nodes` -==================================== - -.. automodule:: logilab.common.ureports.nodes - :members: - -:mod:`logilab.common.ureports` -============================== - -.. automodule:: logilab.common.ureports - :members: - -:mod:`logilab.common.ureports.html_writer` -========================================== - -.. automodule:: logilab.common.ureports.html_writer - :members: - -:mod:`logilab.common.ureports.text_writer` -========================================== - -.. automodule:: logilab.common.ureports.text_writer - :members: - -:mod:`logilab.common.ureports.docbook_writer` -============================================= - -.. automodule:: logilab.common.ureports.docbook_writer - :members: - -:mod:`logilab.mtconverter.engine` -================================= - -.. automodule:: logilab.mtconverter.engine - :members: - -:mod:`logilab.mtconverter.transform` -==================================== - -.. automodule:: logilab.mtconverter.transform - :members: - -:mod:`logilab.mtconverter` -========================== - -.. automodule:: logilab.mtconverter - :members: - -:mod:`logilab.mtconverter.setup` -================================ - -.. automodule:: logilab.mtconverter.setup - :members: - -:mod:`logilab.mtconverter.transforms.html2text` -=============================================== - -.. automodule:: logilab.mtconverter.transforms.html2text - :members: - -:mod:`logilab.mtconverter.transforms.cmdtransforms` -=================================================== - -.. automodule:: logilab.mtconverter.transforms.cmdtransforms - :members: - -:mod:`logilab.mtconverter.transforms.python` -============================================ - -.. automodule:: logilab.mtconverter.transforms.python - :members: - -:mod:`logilab.mtconverter.transforms.pygmentstransforms` -======================================================== - -.. automodule:: logilab.mtconverter.transforms.pygmentstransforms - :members: - -:mod:`logilab.mtconverter.transforms` -===================================== - -.. automodule:: logilab.mtconverter.transforms - :members: - -:mod:`logilab.mtconverter.transforms.piltransforms` -=================================================== - -.. automodule:: logilab.mtconverter.transforms.piltransforms - :members: - -:mod:`logilab.devtools.cvstatus` -================================ - -.. automodule:: logilab.devtools.cvstatus - :members: - -:mod:`logilab.devtools.changelog` -================================= - -.. automodule:: logilab.devtools.changelog - :members: - -:mod:`logilab.devtools` -======================= - -.. automodule:: logilab.devtools - :members: - -:mod:`logilab.devtools.setup` -============================= - -.. automodule:: logilab.devtools.setup - :members: - -:mod:`logilab.devtools.cvslog` -============================== - -.. automodule:: logilab.devtools.cvslog - :members: - -:mod:`logilab.devtools.lgp.utils` -================================= - -.. automodule:: logilab.devtools.lgp.utils - :members: - -:mod:`logilab.devtools.lgp.tag` -=============================== - -.. automodule:: logilab.devtools.lgp.tag - :members: - -:mod:`logilab.devtools.lgp.setupinfo` -===================================== - -.. automodule:: logilab.devtools.lgp.setupinfo - :members: - -:mod:`logilab.devtools.lgp.changelog` -===================================== - -.. automodule:: logilab.devtools.lgp.changelog - :members: - -:mod:`logilab.devtools.lgp.preparedist` -======================================= - -.. automodule:: logilab.devtools.lgp.preparedist - :members: - -:mod:`logilab.devtools.lgp.build` -================================= - -.. automodule:: logilab.devtools.lgp.build - :members: - -:mod:`logilab.devtools.lgp.clean` -================================= - -.. automodule:: logilab.devtools.lgp.clean - :members: - -:mod:`logilab.devtools.lgp` -=========================== - -.. automodule:: logilab.devtools.lgp - :members: - -:mod:`logilab.devtools.lgp.setup` -================================= - -.. automodule:: logilab.devtools.lgp.setup - :members: - -:mod:`logilab.devtools.lgp.check` -================================= - -.. automodule:: logilab.devtools.lgp.check - :members: - -:mod:`logilab.devtools.lgp.exceptions` -====================================== - -.. automodule:: logilab.devtools.lgp.exceptions - :members: - -:mod:`logilab.devtools.templates` -================================= - -.. automodule:: logilab.devtools.templates - :members: - -:mod:`logilab.devtools.templates.setup` -======================================= - -.. automodule:: logilab.devtools.templates.setup - :members: - -:mod:`logilab.devtools.lib.coverage` -==================================== - -.. automodule:: logilab.devtools.lib.coverage - :members: - -:mod:`logilab.devtools.lib.manifest` -==================================== - -.. automodule:: logilab.devtools.lib.manifest - :members: - -:mod:`logilab.devtools.lib.pkginfo` -=================================== - -.. automodule:: logilab.devtools.lib.pkginfo - :members: - -:mod:`logilab.devtools.lib` -=========================== - -.. automodule:: logilab.devtools.lib - :members: - -:mod:`logilab.devtools.vcslib.cvsparse` -======================================= - -.. automodule:: logilab.devtools.vcslib.cvsparse - :members: - -:mod:`logilab.devtools.vcslib.svn` -================================== - -.. automodule:: logilab.devtools.vcslib.svn - :members: - -:mod:`logilab.devtools.vcslib.node` -=================================== - -.. automodule:: logilab.devtools.vcslib.node - :members: - -:mod:`logilab.devtools.vcslib` -============================== - -.. automodule:: logilab.devtools.vcslib - :members: - -:mod:`logilab.devtools.vcslib.interfaces` -========================================= - -.. automodule:: logilab.devtools.vcslib.interfaces - :members: - -:mod:`logilab.devtools.vcslib.cvs` -================================== - -.. automodule:: logilab.devtools.vcslib.cvs - :members: - -:mod:`logilab.devtools.vcslib.hg` -================================= - -.. automodule:: logilab.devtools.vcslib.hg - :members: - -:mod:`rql.nodes` -================ - -.. automodule:: rql.nodes - :members: - -:mod:`rql.undo` -=============== - -.. automodule:: rql.undo - :members: - -:mod:`rql.utils` -================ - -.. automodule:: rql.utils - :members: - -:mod:`rql.base` -=============== - -.. automodule:: rql.base - :members: - -:mod:`rql.analyze` -================== - -.. automodule:: rql.analyze - :members: - -:mod:`rql._exceptions` -====================== - -.. automodule:: rql._exceptions - :members: - -:mod:`rql.compare` -================== - -.. automodule:: rql.compare - :members: - -:mod:`rql.stmts` -================ - -.. automodule:: rql.stmts - :members: - -:mod:`rql.parser_main` -====================== - -.. automodule:: rql.parser_main - :members: - -:mod:`rql.stcheck` -================== - -.. automodule:: rql.stcheck - :members: - -:mod:`rql.parser` -================= - -.. automodule:: rql.parser - :members: - -:mod:`rql` -========== - -.. automodule:: rql - :members: - -:mod:`rql.setup` -================ - -.. automodule:: rql.setup - :members: - -:mod:`rql.interfaces` -===================== - -.. automodule:: rql.interfaces - :members: - -:mod:`rql.editextensions` -========================= - -.. automodule:: rql.editextensions - :members: - -:mod:`rql.fol` -============== - -.. automodule:: rql.fol - :members: - -:mod:`rqlgen` -============= - -.. automodule:: rqlgen - :members: - -:mod:`yams.schema` -================== - -.. automodule:: yams.schema - :members: - -:mod:`yams.reader` -================== - -.. automodule:: yams.reader - :members: - -:mod:`yams.schema2sql` -====================== - -.. automodule:: yams.schema2sql - :members: - -:mod:`yams._exceptions` -======================= - -.. automodule:: yams._exceptions - :members: - -:mod:`yams.sqlreader` -===================== - -.. automodule:: yams.sqlreader - :members: - -:mod:`yams.schema2dot` -====================== - -.. automodule:: yams.schema2dot - :members: - -:mod:`yams` -=========== - -.. automodule:: yams - :members: - -:mod:`yams.setup` -================= - -.. automodule:: yams.setup - :members: - -:mod:`yams.interfaces` -====================== - -.. automodule:: yams.interfaces - :members: - -:mod:`yams.buildobjs` -===================== - -.. automodule:: yams.buildobjs - :members: - -:mod:`yams.constraints` -======================= - -.. automodule:: yams.constraints - :members: diff -r a198d6392466 -r ededce6779b5 doc/book/en/Z010-beginners.en.txt --- a/doc/book/en/Z010-beginners.en.txt Thu Mar 04 18:57:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -.. -*- coding: utf-8 -*- - -.. _QuickInstall: - -Quick Installation of a *CubicWeb* instance -=========================================== - -.. include:: C010-setup.en.txt -.. include:: Z012-create-instance.en.txt - - diff -r a198d6392466 -r ededce6779b5 doc/book/en/Z012-create-instance.en.txt --- a/doc/book/en/Z012-create-instance.en.txt Thu Mar 04 18:57:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -.. -*- coding: utf-8 -*- - -=============================== -Creation of your first instance -=============================== - -What is an instance? --------------------- - -A *CubicWeb* instance is a container that -refers to cubes and configuration parameters for your web instance. -Each instance is stored as a directory in ``~/etc/cubicweb.d`` which enables -us to run your instance. - -What is a cube? ---------------- - -Cubes represent data and basic building bricks of your web instances : -blogs, person, date, addressbook and a lot more. - -.. XXX They related to each other by a 'Schema' which is also the PostGres representation. - -Each cube defines entities, their views, their schemas and workflows -in an independant directory located in ``/path/to/forest/cubicweb/cubes/`` -for a Mercurial installation or in ``/usr/share/cubicweb/cubes`` for -a debian package installation. For example, the 'blog' cube defines the entities -blogs and blogentries. - -When an *CubicWeb* instance is created, you list the cubes that you want to use. -Using a cube means having the entities defined in your cube's schema -available in your instance as well as their views and workflows. - - -Creating a basic *CubicWeb* Instance ------------------------------------- - -We can create an instance to view our -instance in a web browser. :: - - cubicweb-ctl create blog myblog - -.. XXX or :: - -.. XXX cubicweb-ctl create forge myforge - - -.. note:: - The commands used below are more detailled in the section dedicated to - :ref:`cubicweb-ctl`. - -A series of questions will be prompted to you, the default answer is usually -sufficient. You can allways modify the parameters later by editing -configuration files. When a user/psswd is requested to access the database -please use the login you create at the time you configured the database -(:ref:`ConfigurationPostgresql`). - -It is important to distinguish here the user used to access the database and -the user used to login to the cubicweb instance. When a *CubicWeb* instance -starts, it uses the login/psswd for the database to get the schema and handle -low level transaction. But, when ``cubicweb-ctl create`` asks for -a manager login/psswd of *CubicWeb*, it refers to an instance user -to administrate your web instance. -The configuration files are stored in *~/etc/cubicweb.d/myblog/*. - -To launch the web instance, you just type :: - - cubicweb-ctl start myblog - -You can see how it looks by -visiting the URL `http://localhost:8080`. -To login, please use the cubicweb administrator login/psswd you -defined when you created the instance. - -To shutdown the instance :: - - cubicweb-ctl stop myinstance - -.. XXX something like `cubicweb-ctl live-server intra` would be nice - - diff -r a198d6392466 -r ededce6779b5 doc/book/en/admin/additional-tips.rst --- a/doc/book/en/admin/additional-tips.rst Thu Mar 04 18:57:13 2010 +0100 +++ b/doc/book/en/admin/additional-tips.rst Fri Mar 05 18:20:18 2010 +0100 @@ -28,7 +28,7 @@ Simply use the pg_dump in a cron :: - pg_dump -Fc --username=cubicweb --no-owner --file=/var/lib/cubicweb/backup/-$(date '+%Y-%m-%d_%H:%M:%S').dump + su -c "pg_dump -Fc --username=cubicweb --no-owner" postgres > -$(date '+%Y-%m-%d_%H:%M:%S').dump **CubicWeb way** diff -r a198d6392466 -r ededce6779b5 doc/book/en/admin/index.rst --- a/doc/book/en/admin/index.rst Thu Mar 04 18:57:13 2010 +0100 +++ b/doc/book/en/admin/index.rst Fri Mar 05 18:20:18 2010 +0100 @@ -19,6 +19,7 @@ site-config multisources ldap + pyro gae additional-tips diff -r a198d6392466 -r ededce6779b5 doc/book/en/admin/instance-config.rst --- a/doc/book/en/admin/instance-config.rst Thu Mar 04 18:57:13 2010 +0100 +++ b/doc/book/en/admin/instance-config.rst Fri Mar 05 18:20:18 2010 +0100 @@ -12,7 +12,8 @@ /etc/cubicweb.d/myblog/all-in-one.conf -It is a simple text file format INI. In the following description, +It is a simple text file in the INI format +(http://en.wikipedia.org/wiki/INI_file). In the following description, each option name is prefixed with its own section and followed by its default value if necessary, e.g. "`
.