# HG changeset patch # User Sylvain Thénault # Date 1265728817 -3600 # Node ID 271f201e3735bad5d33668f2e0658e03c0b6409a # Parent 32402dd2504d3d10de90c7a07af872eee21365d6 propagation hooks cleanup diff -r 32402dd2504d -r 271f201e3735 server/hook.py --- a/server/hook.py Tue Feb 09 16:20:01 2010 +0100 +++ b/server/hook.py Tue Feb 09 16:20:17 2010 +0100 @@ -238,7 +238,13 @@ # base classes for relation propagation ######################################## class PropagateSubjectRelationHook(Hook): - """propagate permissions and nosy list when new entity are added""" + """propagate some `main_rtype` relation on entities linked as object of + `subject_relations` or as subject of `object_relations` (the watched + relations). + + This hook ensure that when one of the watched relation is added, the + `main_rtype` relation is added to the target entity of the relation. + """ events = ('after_add_relation',) # to set in concrete class @@ -247,9 +253,10 @@ object_relations = None def __call__(self): + assert self.main_rtype for eid in (self.eidfrom, self.eidto): etype = self._cw.describe(eid)[0] - if not self._cw.vreg.schema.eschema(etype).has_subject_relation(self.main_rtype): + if self.main_rtype not in self._cw.vreg.schema.eschema(etype).subjrels: return if self.rtype in self.subject_relations: meid, seid = self.eidfrom, self.eidto @@ -263,11 +270,12 @@ class PropagateSubjectRelationAddHook(Hook): - """propagate on existing entities when a permission or nosy list is added""" + """propagate to entities at the end of watched relations when a `main_rtype` + relation is added + """ events = ('after_add_relation',) # to set in concrete class - main_rtype = None subject_relations = None object_relations = None @@ -287,11 +295,12 @@ class PropagateSubjectRelationDelHook(Hook): - """propagate on existing entities when a permission is deleted""" + """propagate to entities at the end of watched relations when a `main_rtype` + relation is deleted + """ events = ('after_delete_relation',) # to set in concrete class - main_rtype = None subject_relations = None object_relations = None