cwvreg.py
changeset 3720 5376aaadd16b
parent 3674 387d51af966d
parent 3719 7547fe738e54
child 3998 94cc7cad3d2d
equal deleted inserted replaced
3678:29f74716fd70 3720:5376aaadd16b
    27     for rtag in RTAGS:
    27     for rtag in RTAGS:
    28         rtag.clear()
    28         rtag.clear()
    29 
    29 
    30 
    30 
    31 def use_interfaces(obj):
    31 def use_interfaces(obj):
    32     """return interfaces used by the given object by searchinf for implements
    32     """return interfaces used by the given object by searching for implements
    33     selectors, with a bw compat fallback to accepts_interfaces attribute
    33     selectors, with a bw compat fallback to accepts_interfaces attribute
    34     """
    34     """
    35     from cubicweb.selectors import implements
    35     from cubicweb.selectors import implements
    36     try:
    36     try:
    37         # XXX deprecated
    37         # XXX deprecated
    60 
    60 
    61     def initialization_completed(self):
    61     def initialization_completed(self):
    62         pass
    62         pass
    63 
    63 
    64     @deprecated('[3.6] select object, then use obj.render()')
    64     @deprecated('[3.6] select object, then use obj.render()')
    65     def render(self, __oid, req, __fallback_oid=None, rset=None, **kwargs):
    65     def render(self, __oid, req, __fallback_oid=None, rset=None, initargs=None,
    66         """select object, or fallback object if specified and the first one
    66                **kwargs):
    67         isn't selectable, then render it
    67         """Select object with the given id (`__oid`) then render it.  If the
    68         """
    68         object isn't selectable, try to select fallback object if
    69         try:
    69         `__fallback_oid` is specified.
    70             obj = self.select(__oid, req, rset=rset, **kwargs)
    70 
       
    71         If specified `initargs` is expected to be a dictionnary containing
       
    72         arguments that should be given to selection (hence to object's __init__
       
    73         as well), but not to render(). Other arbitrary keyword arguments will be
       
    74         given to selection *and* to render(), and so should be handled by
       
    75         object's call or cell_call method..
       
    76         """
       
    77         if initargs is None:
       
    78             initargs = kwargs
       
    79         else:
       
    80             initargs.update(kwargs)
       
    81         try:
       
    82             obj = self.select(__oid, req, rset=rset, **initargs)
    71         except NoSelectableObject:
    83         except NoSelectableObject:
    72             if __fallback_oid is None:
    84             if __fallback_oid is None:
    73                 raise
    85                 raise
    74             obj = self.select(__fallback_oid, req, rset=rset, **kwargs)
    86             obj = self.select(__fallback_oid, req, rset=rset, **initargs)
    75         return obj.render(**kwargs)
    87         return obj.render(**kwargs)
    76 
    88 
    77     @deprecated('[3.6] use select_or_none and test for obj.cw_propval("visible")')
    89     @deprecated('[3.6] use select_or_none and test for obj.cw_propval("visible")')
    78     def select_vobject(self, oid, *args, **kwargs):
    90     def select_vobject(self, oid, *args, **kwargs):
    79         selected = self.select_or_none(oid, *args, **kwargs)
    91         selected = self.select_or_none(oid, *args, **kwargs)
   303         searchpath = self.config.vregistry_path()
   315         searchpath = self.config.vregistry_path()
   304         self.reset(searchpath, force_reload=False)
   316         self.reset(searchpath, force_reload=False)
   305         self.register_objects(searchpath, force_reload=False)
   317         self.register_objects(searchpath, force_reload=False)
   306         # map lowered entity type names to their actual name
   318         # map lowered entity type names to their actual name
   307         self.case_insensitive_etypes = {}
   319         self.case_insensitive_etypes = {}
   308         for etype in self.schema.entities():
   320         for eschema in self.schema.entities():
   309             etype = str(etype)
   321             etype = str(eschema)
   310             self.case_insensitive_etypes[etype.lower()] = etype
   322             self.case_insensitive_etypes[etype.lower()] = etype
       
   323             clear_cache(eschema, 'ordered_relations')
       
   324             clear_cache(eschema, 'meta_attributes')
   311 
   325 
   312     def _set_schema(self, schema):
   326     def _set_schema(self, schema):
   313         """set instance'schema"""
   327         """set instance'schema"""
   314         self.schema = schema
   328         self.schema = schema
   315         clear_cache(self, 'rqlhelper')
   329         clear_cache(self, 'rqlhelper')
   377         if self.config.cleanup_interface_sobjects:
   391         if self.config.cleanup_interface_sobjects:
   378             # remove appobjects that don't support any available interface
   392             # remove appobjects that don't support any available interface
   379             implemented_interfaces = set()
   393             implemented_interfaces = set()
   380             if 'Any' in self.get('etypes', ()):
   394             if 'Any' in self.get('etypes', ()):
   381                 for etype in self.schema.entities():
   395                 for etype in self.schema.entities():
   382                     if etype.is_final():
   396                     if etype.final:
   383                         continue
   397                         continue
   384                     cls = self['etypes'].etype_class(etype)
   398                     cls = self['etypes'].etype_class(etype)
   385                     for iface in cls.__implements__:
   399                     for iface in cls.__implements__:
   386                         implemented_interfaces.update(iface.__mro__)
   400                         implemented_interfaces.update(iface.__mro__)
   387                     implemented_interfaces.update(cls.__mro__)
   401                     implemented_interfaces.update(cls.__mro__)