cwvreg.py
changeset 1593 8602116daef3
parent 1381 6042f1b342bb
child 1641 2c80b09d8d86
equal deleted inserted replaced
1592:80e0ef472ec3 1593:8602116daef3
    89                 if registry in ('propertydefs', 'propertyvalues', 'etypes'):
    89                 if registry in ('propertydefs', 'propertyvalues', 'etypes'):
    90                     continue
    90                     continue
    91                 for oid, objects in regcontent.items():
    91                 for oid, objects in regcontent.items():
    92                     for obj in reversed(objects[:]):
    92                     for obj in reversed(objects[:]):
    93                         if not obj in objects:
    93                         if not obj in objects:
    94                             continue # obj has been kicked by a previous one
    94                             continue # obj was kicked by a previous one
    95                         accepted = set(getattr(obj, 'accepts_interfaces', ()))
    95                         accepted = set(getattr(obj, 'accepts_interfaces', ()))
    96                         if accepted:
    96                         if accepted:
    97                             for accepted_iface in accepted:
    97                             for accepted_iface in accepted:
    98                                 for found_iface in interfaces:
    98                                 for found_iface in interfaces:
    99                                     if issubclass(found_iface, accepted_iface):
    99                                     if issubclass(found_iface, accepted_iface):
   101                                         if hasattr(obj.__registerer__, 'remove_all_equivalents'):
   101                                         if hasattr(obj.__registerer__, 'remove_all_equivalents'):
   102                                             registerer = obj.__registerer__(self, obj)
   102                                             registerer = obj.__registerer__(self, obj)
   103                                             registerer.remove_all_equivalents(objects)
   103                                             registerer.remove_all_equivalents(objects)
   104                                         break
   104                                         break
   105                                 else:
   105                                 else:
   106                                     self.debug('kicking vobject %s (unsupported interface)', obj)
   106                                     self.debug('kicking vobject %s because interface is not supported', obj)
   107                                     objects.remove(obj)
   107                                     objects.remove(obj)
   108                     # if objects is empty, remove oid from registry
   108                     # if objects is empty, remove oid from registry
   109                     if not objects:
   109                     if not objects:
   110                         del regcontent[oid]
   110                         del regcontent[oid]
   111 
   111