cwvreg.py
branchtls-sprint
changeset 777 39695e98ba35
parent 776 29ba95ea7e7d
child 785 e4f9fa3c891a
equal deleted inserted replaced
776:29ba95ea7e7d 777:39695e98ba35
   103     def register(self, obj, **kwargs):
   103     def register(self, obj, **kwargs):
   104         if kwargs.get('registryname', obj.__registry__) == 'etypes':
   104         if kwargs.get('registryname', obj.__registry__) == 'etypes':
   105             kwargs['clear'] = True
   105             kwargs['clear'] = True
   106         super(CubicWebRegistry, self).register(obj, **kwargs)
   106         super(CubicWebRegistry, self).register(obj, **kwargs)
   107         # XXX bw compat
   107         # XXX bw compat
   108         ifaces = getattr(obj, 'accepts_interfaces', None)
   108         ifaces = use_interfaces(obj)
   109         if ifaces:
   109         if ifaces:
   110             self._needs_iface[obj] = frozenset(ifaces)
   110             self._needs_iface[obj] = frozenset(ifaces)
   111         
   111         
   112     def register_objects(self, path, force_reload=None):
   112     def register_objects(self, path, force_reload=None):
   113         """overriden to remove objects requiring a missing interface"""
   113         """overriden to remove objects requiring a missing interface"""
   120                 return
   120                 return
   121             # remove vobjects that don't support any available interface
   121             # remove vobjects that don't support any available interface
   122             interfaces = set()
   122             interfaces = set()
   123             for classes in self.get('etypes', {}).values():
   123             for classes in self.get('etypes', {}).values():
   124                 for cls in classes:
   124                 for cls in classes:
   125                     interfaces.update(cls.__implements__)
   125                     for iface in cls.__implements__:
       
   126                         interfaces.update(expand_parent_classes(iface))
   126             for obj, ifaces in self._needs_iface.items():
   127             for obj, ifaces in self._needs_iface.items():
   127                 if not ifaces & interfaces:
   128                 if not ifaces & interfaces:
   128                     self.debug('kicking vobject %s (unsupported interface)', obj)
   129                     self.debug('kicking vobject %s (unsupported interface)', obj)
   129                     self.unregister(obj)
   130                     self.unregister(obj)
   130 
   131             
       
   132         
       
   133     
   131     def eid_rset(self, cursor, eid, etype=None):
   134     def eid_rset(self, cursor, eid, etype=None):
   132         """return a result set for the given eid without doing actual query
   135         """return a result set for the given eid without doing actual query
   133         (we have the eid, we can suppose it exists and user has access to the
   136         (we have the eid, we can suppose it exists and user has access to the
   134         entity)
   137         entity)
   135         """
   138         """