82 def do_it_yourself(self, registered): |
82 def do_it_yourself(self, registered): |
83 # if object is accepting interface, we have register it now and |
83 # if object is accepting interface, we have register it now and |
84 # remove it latter if no object is implementing accepted interfaces |
84 # remove it latter if no object is implementing accepted interfaces |
85 if _accepts_interfaces(self.vobject): |
85 if _accepts_interfaces(self.vobject): |
86 return self.vobject |
86 return self.vobject |
87 # XXX no more .accepts attribute |
|
88 # if not 'Any' in self.vobject.accepts: |
|
89 # for ertype in self.vobject.accepts: |
|
90 # if ertype in self.schema: |
|
91 # break |
|
92 # else: |
|
93 # self.skip() |
|
94 # return None |
|
95 for required in getattr(self.vobject, 'requires', ()): |
|
96 if required not in self.schema: |
|
97 self.skip() |
|
98 return |
|
99 self.remove_equivalents(registered) |
87 self.remove_equivalents(registered) |
100 return self.vobject |
88 return self.vobject |
101 |
89 |
102 def equivalent(self, other): |
90 def equivalent(self, other): |
103 if _accepts_interfaces(self.vobject) != _accepts_interfaces(other): |
91 if _accepts_interfaces(self.vobject) != _accepts_interfaces(other): |
183 cls = super(action_registerer, self).do_it_yourself(registered) |
171 cls = super(action_registerer, self).do_it_yourself(registered) |
184 if hasattr(cls, 'accepts'): |
172 if hasattr(cls, 'accepts'): |
185 registerer = accepts_registerer(self.registry, cls) |
173 registerer = accepts_registerer(self.registry, cls) |
186 cls = registerer.do_it_yourself(registered) |
174 cls = registerer.do_it_yourself(registered) |
187 return cls |
175 return cls |
188 |
|
189 |
|
190 class extresources_registerer(priority_registerer): |
|
191 """'registerer according to a .need_resources attributes which |
|
192 should list necessary resource identifiers for the wrapped object. |
|
193 If one of its resources is missing, don't register |
|
194 """ |
|
195 def do_it_yourself(self, registered): |
|
196 if not hasattr(self.config, 'has_resource'): |
|
197 return |
|
198 for resourceid in self.vobject.need_resources: |
|
199 if not self.config.has_resource(resourceid): |
|
200 return |
|
201 return super(extresources_registerer, self).do_it_yourself(registered) |
|
202 |
176 |
203 |
177 |
204 __all__ = [cls.__name__ for cls in globals().values() |
178 __all__ = [cls.__name__ for cls in globals().values() |
205 if isinstance(cls, type) and issubclass(cls, registerer) |
179 if isinstance(cls, type) and issubclass(cls, registerer) |
206 and not cls is registerer] |
180 and not cls is registerer] |