common/registerers.py
branchtls-sprint
changeset 725 2f3e6afabdb5
parent 718 f7011679437a
child 778 847db4c91061
equal deleted inserted replaced
724:1ecba333cfb0 725:2f3e6afabdb5
    12 
    12 
    13 from cubicweb.vregistry import registerer, yes_registerer
    13 from cubicweb.vregistry import registerer, yes_registerer
    14 from cubicweb.selectors import implements
    14 from cubicweb.selectors import implements
    15 
    15 
    16 def _accepts_interfaces(obj):
    16 def _accepts_interfaces(obj):
    17     impl = obj.__select__.search_selector(implements)
    17     try:
    18     if impl:
    18         return sorted(obj.accepts_interfaces)
    19         return sorted(impl.expected_ifaces)
    19     except AttributeError:
    20     return sorted(getattr(obj, 'accepts_interfaces', ()))
    20         try:
       
    21             impl = obj.__select__.search_selector(implements)
       
    22             if impl:
       
    23                 return sorted(impl.expected_ifaces)
       
    24         except AttributeError:
       
    25             pass # old-style vobject classes with no accepts_interfaces
       
    26         return ()
    21 
    27 
    22 
    28 
    23 class priority_registerer(registerer):
    29 class priority_registerer(registerer):
    24     """systematically kick previous registered class and register the
    30     """systematically kick previous registered class and register the
    25     wrapped class (based on the fact that directory containing vobjects
    31     wrapped class (based on the fact that directory containing vobjects
    66       attribute, kick it out
    72       attribute, kick it out
    67     * register
    73     * register
    68     """
    74     """
    69     def do_it_yourself(self, registered):
    75     def do_it_yourself(self, registered):
    70         # if object is accepting interface, we have register it now and
    76         # if object is accepting interface, we have register it now and
    71         # remove it latter if no object is implementing accepted interfaces
    77         # remove it later if no object is implementing accepted interfaces
    72         if _accepts_interfaces(self.vobject):
    78         if _accepts_interfaces(self.vobject):
    73             return self.vobject
    79             return self.vobject
    74         self.remove_equivalents(registered)
    80         self.remove_equivalents(registered)
    75         return self.vobject
    81         return self.vobject
    76     
    82