equal
deleted
inserted
replaced
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 |