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__) |