server/hook.py
changeset 7990 a673d1d9a738
parent 7879 9aae456abab5
child 8032 bcb87336c7d2
equal deleted inserted replaced
7989:db76e8aaec29 7990:a673d1d9a738
   289             kwargs.update({'eidfrom': subject, 'eidto': object})
   289             kwargs.update({'eidfrom': subject, 'eidto': object})
   290             yield kwargs
   290             yield kwargs
   291 
   291 
   292 
   292 
   293 class HooksRegistry(CWRegistry):
   293 class HooksRegistry(CWRegistry):
   294     def initialization_completed(self):
       
   295         for appobjects in self.values():
       
   296             for cls in appobjects:
       
   297                 if not cls.enabled:
       
   298                     warn('[3.6] %s: enabled is deprecated' % classid(cls))
       
   299                     self.unregister(cls)
       
   300 
   294 
   301     def register(self, obj, **kwargs):
   295     def register(self, obj, **kwargs):
   302         obj.check_events()
   296         obj.check_events()
   303         super(HooksRegistry, self).register(obj, **kwargs)
   297         super(HooksRegistry, self).register(obj, **kwargs)
   304 
   298 
   532     __select__ = enabled_category()
   526     __select__ = enabled_category()
   533     # set this in derivated classes
   527     # set this in derivated classes
   534     events = None
   528     events = None
   535     category = None
   529     category = None
   536     order = 0
   530     order = 0
   537     # XXX deprecated
       
   538     enabled = True
       
   539     # stop pylint from complaining about missing attributes in Hooks classes
   531     # stop pylint from complaining about missing attributes in Hooks classes
   540     eidfrom = eidto = entity = rtype = repo = None
   532     eidfrom = eidto = entity = rtype = repo = None
   541 
   533 
   542     @classmethod
   534     @classmethod
   543     @cached
   535     @cached
   565     @classproperty
   557     @classproperty
   566     def __registries__(cls):
   558     def __registries__(cls):
   567         cls.check_events()
   559         cls.check_events()
   568         return ['%s_hooks' % ev for ev in cls.events]
   560         return ['%s_hooks' % ev for ev in cls.events]
   569 
   561 
   570     @classproperty
       
   571     def __regid__(cls):
       
   572         warn('[3.6] %s: please specify an id for your hook' % classid(cls),
       
   573              DeprecationWarning)
       
   574         return str(id(cls))
       
   575 
       
   576     @classmethod
       
   577     def __registered__(cls, reg):
       
   578         super(Hook, cls).__registered__(reg)
       
   579         if getattr(cls, 'accepts', None):
       
   580             warn('[3.6] %s: accepts is deprecated, define proper __select__'
       
   581                  % classid(cls), DeprecationWarning)
       
   582             rtypes = []
       
   583             for ertype in cls.accepts: # pylint: disable=E1101
       
   584                 if ertype.islower():
       
   585                     rtypes.append(ertype)
       
   586                 else:
       
   587                     cls.__select__ = cls.__select__ & is_instance(ertype)
       
   588             if rtypes:
       
   589                 cls.__select__ = cls.__select__ & match_rtype(*rtypes)
       
   590         return cls
       
   591 
       
   592     known_args = set(('entity', 'rtype', 'eidfrom', 'eidto', 'repo', 'timestamp'))
   562     known_args = set(('entity', 'rtype', 'eidfrom', 'eidto', 'repo', 'timestamp'))
   593     def __init__(self, req, event, **kwargs):
   563     def __init__(self, req, event, **kwargs):
   594         for arg in self.known_args:
   564         for arg in self.known_args:
   595             if arg in kwargs:
   565             if arg in kwargs:
   596                 setattr(self, arg, kwargs.pop(arg))
   566                 setattr(self, arg, kwargs.pop(arg))
   597         super(Hook, self).__init__(req, **kwargs)
   567         super(Hook, self).__init__(req, **kwargs)
   598         self.event = event
   568         self.event = event
   599 
       
   600     def __call__(self):
       
   601         if hasattr(self, 'call'):
       
   602             warn('[3.6] %s: call is deprecated, implement __call__'
       
   603                  % classid(self.__class__), DeprecationWarning)
       
   604             # pylint: disable=E1101
       
   605             if self.event.endswith('_relation'):
       
   606                 self.call(self._cw, self.eidfrom, self.rtype, self.eidto)
       
   607             elif 'delete' in self.event:
       
   608                 self.call(self._cw, self.entity.eid)
       
   609             elif self.event.startswith('server_'):
       
   610                 self.call(self.repo)
       
   611             elif self.event.startswith('session_'):
       
   612                 self.call(self._cw)
       
   613             else:
       
   614                 self.call(self._cw, self.entity)
       
   615 
   569 
   616 set_log_methods(Hook, getLogger('cubicweb.hook'))
   570 set_log_methods(Hook, getLogger('cubicweb.hook'))
   617 
   571 
   618 
   572 
   619 # abtract hooks for relation propagation #######################################
   573 # abtract hooks for relation propagation #######################################
   829         """
   783         """
   830 
   784 
   831     def postcommit_event(self):
   785     def postcommit_event(self):
   832         """the observed connections set has committed"""
   786         """the observed connections set has committed"""
   833 
   787 
   834     @property
       
   835     @deprecated('[3.6] use self.session.user')
       
   836     def user(self):
       
   837         return self.session.user
       
   838 
       
   839     @property
       
   840     @deprecated('[3.6] use self.session.repo')
       
   841     def repo(self):
       
   842         return self.session.repo
       
   843 
       
   844     @property
       
   845     @deprecated('[3.6] use self.session.vreg.schema')
       
   846     def schema(self):
       
   847         return self.session.repo.schema
       
   848 
       
   849     @property
       
   850     @deprecated('[3.6] use self.session.vreg.config')
       
   851     def config(self):
       
   852         return self.session.repo.config
       
   853 
       
   854     # these are overridden by set_log_methods below
   788     # these are overridden by set_log_methods below
   855     # only defining here to prevent pylint from complaining
   789     # only defining here to prevent pylint from complaining
   856     info = warning = error = critical = exception = debug = lambda msg,*a,**kw: None
   790     info = warning = error = critical = exception = debug = lambda msg,*a,**kw: None
   857 
   791 
   858 set_log_methods(Operation, getLogger('cubicweb.session'))
   792 set_log_methods(Operation, getLogger('cubicweb.session'))