--- a/server/hook.py Fri Apr 15 16:05:20 2011 +0200
+++ b/server/hook.py Fri Apr 15 15:42:17 2011 +0200
@@ -270,13 +270,17 @@
'session_open', 'session_close'))
ALL_HOOKS = ENTITIES_HOOKS | RELATIONS_HOOKS | SYSTEM_HOOKS
-def _iter_kwargs(entities, kwargs):
- if not entities:
+def _iter_kwargs(entities, eids_from_to, kwargs):
+ if not entities and not eids_from_to:
yield kwargs
- else:
+ elif entities:
for entity in entities:
kwargs['entity'] = entity
yield kwargs
+ else:
+ for subject, object in eids_from_to:
+ kwargs.update({'eidfrom': subject, 'eidto': object})
+ yield kwargs
class HooksRegistry(CWRegistry):
@@ -304,12 +308,19 @@
if 'entities' in kwargs:
assert 'entity' not in kwargs, \
'can\'t pass "entities" and "entity" arguments simultaneously'
+ assert 'eids_from_to' not in kwargs, \
+ 'can\'t pass "entities" and "eids_from_to" arguments simultaneously'
entities = kwargs.pop('entities')
+ eids_from_to = []
+ elif 'eids_from_to' in kwargs:
+ entities = []
+ eids_from_to = kwargs.pop('eids_from_to')
else:
entities = []
+ eids_from_to = []
# by default, hooks are executed with security turned off
with security_enabled(session, read=False):
- for _kwargs in _iter_kwargs(entities, kwargs):
+ for _kwargs in _iter_kwargs(entities, eids_from_to, kwargs):
hooks = sorted(self.possible_objects(session, **_kwargs),
key=lambda x: x.order)
with security_enabled(session, write=False):