server/hook.py
changeset 2847 c2ee28f4d4b1
parent 2840 06daf13195d4
child 2855 1d9be3dffa94
equal deleted inserted replaced
2846:e71d6a585b83 2847:c2ee28f4d4b1
    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 ###############################################