18 |
18 |
19 Relation (eg before_add_relation, after_add_relation, before_delete_relation, |
19 Relation (eg before_add_relation, after_add_relation, before_delete_relation, |
20 after_delete_relation) all have `eidfrom`, `rtype`, `eidto` attributes. |
20 after_delete_relation) all have `eidfrom`, `rtype`, `eidto` attributes. |
21 |
21 |
22 Server start/stop hooks (eg server_startup, server_shutdown) have a `repo` |
22 Server start/stop hooks (eg server_startup, server_shutdown) have a `repo` |
23 attribute, but *their `cw_req` attribute is None*. |
23 attribute, but *their `_cw` attribute is None*. |
24 |
24 |
25 Backup/restore hooks (eg server_backup, server_restore) have a `repo` and a |
25 Backup/restore hooks (eg server_backup, server_restore) have a `repo` and a |
26 `timestamp` attributes, but *their `cw_req` attribute is None*. |
26 `timestamp` attributes, but *their `_cw` attribute is None*. |
27 |
27 |
28 Session hooks (eg session_open, session_close) have no special attribute. |
28 Session hooks (eg session_open, session_close) have no special attribute. |
29 |
29 |
30 |
30 |
31 :organization: Logilab |
31 :organization: Logilab |
70 raise Exception('bad event %s on %s' % (event, obj)) |
70 raise Exception('bad event %s on %s' % (event, obj)) |
71 super(HooksRegistry, self).register(obj, **kwargs) |
71 super(HooksRegistry, self).register(obj, **kwargs) |
72 |
72 |
73 def call_hooks(self, event, req=None, **kwargs): |
73 def call_hooks(self, event, req=None, **kwargs): |
74 kwargs['event'] = event |
74 kwargs['event'] = event |
75 # XXX remove .enabled |
75 for hook in sorted(self.possible_objects(req, **kwargs), key=lambda x: x.order): |
76 for hook in sorted([x for x in self.possible_objects(req, **kwargs) |
76 if hook.enabled: |
77 if x.enabled], key=lambda x: x.order): |
77 hook() |
78 hook() |
78 else: |
|
79 warn('[3.5] %s: enabled is deprecated' % cls) |
79 |
80 |
80 VRegistry.REGISTRY_FACTORY['hooks'] = HooksRegistry |
81 VRegistry.REGISTRY_FACTORY['hooks'] = HooksRegistry |
81 |
82 |
82 |
83 |
83 # some hook specific selectors ################################################# |
84 # some hook specific selectors ################################################# |
163 |
164 |
164 def __call__(self): |
165 def __call__(self): |
165 if hasattr(self, 'call'): |
166 if hasattr(self, 'call'): |
166 warn('[3.5] %s: call is deprecated, implements __call__' % self.__class__) |
167 warn('[3.5] %s: call is deprecated, implements __call__' % self.__class__) |
167 if self.event.endswith('_relation'): |
168 if self.event.endswith('_relation'): |
168 self.call(self.cw_req, self.eidfrom, self.rtype, self.eidto) |
169 self.call(self._cw, self.eidfrom, self.rtype, self.eidto) |
169 elif 'delete' in self.event: |
170 elif 'delete' in self.event: |
170 self.call(self.cw_req, self.entity.eid) |
171 self.call(self._cw, self.entity.eid) |
171 elif self.event.startswith('server_'): |
172 elif self.event.startswith('server_'): |
172 self.call(self.repo) |
173 self.call(self.repo) |
173 elif self.event.startswith('session_'): |
174 elif self.event.startswith('session_'): |
174 self.call(self.cw_req) |
175 self.call(self._cw) |
175 else: |
176 else: |
176 self.call(self.cw_req, self.entity) |
177 self.call(self._cw, self.entity) |
177 |
178 |
178 set_log_methods(Hook, getLogger('cubicweb.hook')) |
179 set_log_methods(Hook, getLogger('cubicweb.hook')) |
179 |
180 |
180 |
181 |
181 # abstract classes for operation ############################################### |
182 # abstract classes for operation ############################################### |