# HG changeset patch # User logilab@eusebius.local # Date 1234888247 -3600 # Node ID 4a29050fe143e44d6c7e7e62969c8ac72e35773a # Parent 9b04bbfe3f90133395b0811565827b8583b65abe# Parent 6c332f5c969c3fd32d282c25b34d94f941db4e47 merge branches in tls-sprint (bis) diff -r 9b04bbfe3f90 -r 4a29050fe143 common/registerers.py --- a/common/registerers.py Tue Feb 17 17:28:25 2009 +0100 +++ b/common/registerers.py Tue Feb 17 17:30:47 2009 +0100 @@ -125,54 +125,6 @@ def equivalent(self, other): return other.id == self.vobject.id - - -class etype_rtype_registerer(registerer): - """registerer handling optional .etype and .rtype attributes.: - - * if .etype is set and is not an entity type defined in the - application schema, skip the wrapped class - * if .rtype or .relname is set and is not a relation type defined in - the application schema, skip the wrapped class - * register - """ - def do_it_yourself(self, registered): - cls = self.vobject - if hasattr(cls, 'etype'): - if not self.schema.has_entity(cls.etype): - return - rtype = getattr(cls, 'rtype', None) - if rtype and not self.schema.has_relation(rtype): - return - return cls - -class etype_rtype_priority_registerer(etype_rtype_registerer): - """add priority behaviour to the etype_rtype_registerer - """ - def do_it_yourself(self, registered): - cls = super(etype_rtype_priority_registerer, self).do_it_yourself(registered) - if cls: - registerer = priority_registerer(self.registry, cls) - cls = registerer.do_it_yourself(registered) - return cls - -class action_registerer(etype_rtype_registerer): - """'all in one' actions registerer, handling optional .accepts, - .etype and .rtype attributes: - - * if .etype is set and is not an entity type defined in the - application schema, skip the wrapped class - * if .rtype or .relname is set and is not a relation type defined in - the application schema, skip the wrapped class - * if .accepts is set, delegate to the accepts_registerer - * register - """ - def do_it_yourself(self, registered): - cls = super(action_registerer, self).do_it_yourself(registered) - if hasattr(cls, 'accepts'): - registerer = accepts_registerer(self.registry, cls) - cls = registerer.do_it_yourself(registered) - return cls __all__ = [cls.__name__ for cls in globals().values() diff -r 9b04bbfe3f90 -r 4a29050fe143 goa/appobjects/sessions.py --- a/goa/appobjects/sessions.py Tue Feb 17 17:28:25 2009 +0100 +++ b/goa/appobjects/sessions.py Tue Feb 17 17:30:47 2009 +0100 @@ -17,8 +17,8 @@ from cubicweb import UnknownEid, BadConnectionId from cubicweb.dbapi import Connection, ConnectionProperties, repo_connect +from cubicweb.selectors import none_rset, match_user_groups from cubicweb.server.session import Session -from cubicweb.common.selectors import none_rset, match_user_groups from cubicweb.web import InvalidSession from cubicweb.web.application import AbstractSessionManager from cubicweb.web.application import AbstractAuthenticationManager @@ -269,4 +269,9 @@ self.w(u'%s repository sessions closed
\n' % nbclosed) self.w(u'%s remaining sessions
\n' % remaining) self.w(u'') + +def registration_callback(vreg): + vreg.register(SessionsCleaner) + vreg.register(GAEAuthenticationManager, clear=True) + vreg.register(GAEPersistentSessionManager, clear=True) diff -r 9b04bbfe3f90 -r 4a29050fe143 vregistry.py --- a/vregistry.py Tue Feb 17 17:28:25 2009 +0100 +++ b/vregistry.py Tue Feb 17 17:30:47 2009 +0100 @@ -237,13 +237,20 @@ return objects[0].selected(*args, **kwargs) # methods for explicit (un)registration ################################### - - def register(self, obj, registryname=None, oid=None): + +# def clear(self, key): +# regname, oid = key.split('.') +# self[regname].pop(oid, None) + + def register(self, obj, registryname=None, oid=None, clear=False): """base method to add an object in the registry""" registryname = registryname or obj.__registry__ oid = oid or obj.id registry = self._registries.setdefault(registryname, {}) - vobjects = registry.setdefault(oid, []) + if clear: + vobjects = registry[oid] = [] + else: + vobjects = registry.setdefault(oid, []) # registered() is technically a classmethod but is not declared # as such because we need to compose registered in some cases vobject = obj.registered.im_func(cls, self) @@ -426,8 +433,8 @@ def load_module(self, module): self._registered = {} - if hasattr(module, 'cw_register_objects'): - module.cw_register_objects(self) + if hasattr(module, 'registration_callback'): + module.registration_callback(self) else: self.info('loading %s', module) for objname, obj in vars(module).items(): diff -r 9b04bbfe3f90 -r 4a29050fe143 web/action.py --- a/web/action.py Tue Feb 17 17:28:25 2009 +0100 +++ b/web/action.py Tue Feb 17 17:30:47 2009 +0100 @@ -11,7 +11,7 @@ one_line_rset, may_add_relation, yes, accepts_compat, condition_compat, deprecate) from cubicweb.common.appobject import AppRsetObject -from cubicweb.common.registerers import action_registerer +from cubicweb.common.registerers import accepts_registerer _ = unicode @@ -21,7 +21,7 @@ request search state. """ __registry__ = 'actions' - __registerer__ = action_registerer + __registerer__ = accepts_registerer __selectors__ = (yes,) property_defs = { diff -r 9b04bbfe3f90 -r 4a29050fe143 web/box.py --- a/web/box.py Tue Feb 17 17:28:25 2009 +0100 +++ b/web/box.py Tue Feb 17 17:30:47 2009 +0100 @@ -13,9 +13,7 @@ from cubicweb.selectors import (one_line_rset, primary_view, match_context_prop, has_related_entities, accepts_compat, condition_compat) -from cubicweb.common.registerers import ( - accepts_registerer, extresources_registerer, - etype_rtype_priority_registerer) +from cubicweb.common.registerers import accepts_registerer, priority_registerer #etype_rtype_selector, has_relation, from cubicweb.common.view import Template, ReloadableMixIn @@ -104,7 +102,7 @@ according to application schema and display according to connected user's rights) and rql attributes """ - __registerer__ = etype_rtype_priority_registerer + __registerer__ = priority_registerer #XXX __selectors__ = BoxTemplate.__selectors__ + (etype_rtype_selector,) rql = None diff -r 9b04bbfe3f90 -r 4a29050fe143 web/component.py --- a/web/component.py Tue Feb 17 17:28:25 2009 +0100 +++ b/web/component.py Tue Feb 17 17:30:47 2009 +0100 @@ -14,7 +14,7 @@ from cubicweb.common.appobject import Component from cubicweb.common.utils import merge_dicts from cubicweb.common.view import View -from cubicweb.common.registerers import action_registerer +from cubicweb.common.registerers import accepts_registerer from cubicweb.common.uilib import html_escape _ = unicode @@ -31,7 +31,7 @@ """ __registry__ = 'contentnavigation' - __registerer__ = action_registerer + __registerer__ = accepts_registerer __selectors__ = (one_line_rset, primary_view, match_context_prop,) registered = accepts_compat(has_relation_compat(condition_compat(View.registered.im_func)))