common/registerers.py
branchtls-sprint
changeset 664 04154a2b238d
parent 631 99f5852f8604
child 670 6c332f5c969c
equal deleted inserted replaced
663:482d39578366 664:04154a2b238d
    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]