cubicweb/cwvreg.py
changeset 12541 bbbccb0b3a66
parent 12540 623e9dd2977f
child 12549 e2db422752b4
equal deleted inserted replaced
12540:623e9dd2977f 12541:bbbccb0b3a66
   125             self.etype_class(eschema)
   125             self.etype_class(eschema)
   126 
   126 
   127     def register(self, obj, **kwargs):
   127     def register(self, obj, **kwargs):
   128         obj = related_appobject(obj)
   128         obj = related_appobject(obj)
   129         oid = kwargs.get('oid') or obj.__regid__
   129         oid = kwargs.get('oid') or obj.__regid__
   130         if oid != 'Any' and not oid in self.schema:
   130         if oid != 'Any' and oid not in self.schema:
   131             self.error('don\'t register %s, %s type not defined in the '
   131             self.error('don\'t register %s, %s type not defined in the '
   132                        'schema', obj, oid)
   132                        'schema', obj, oid)
   133             return
   133             return
   134         kwargs['clear'] = True
   134         kwargs['clear'] = True
   135         super(ETypeRegistry, self).register(obj, **kwargs)
   135         super(ETypeRegistry, self).register(obj, **kwargs)
   250 
   250 
   251     def possible_actions(self, req, rset=None, **kwargs):
   251     def possible_actions(self, req, rset=None, **kwargs):
   252         if rset is None:
   252         if rset is None:
   253             actions = self.poss_visible_objects(req, rset=rset, **kwargs)
   253             actions = self.poss_visible_objects(req, rset=rset, **kwargs)
   254         else:
   254         else:
   255             actions = rset.possible_actions(**kwargs) # cached implementation
   255             actions = rset.possible_actions(**kwargs)  # cached implementation
   256         result = {}
   256         result = {}
   257         for action in actions:
   257         for action in actions:
   258             result.setdefault(action.category, []).append(action)
   258             result.setdefault(action.category, []).append(action)
   259         return result
   259         return result
   260 
   260 
   359             return self[regid]
   359             return self[regid]
   360 
   360 
   361     def items(self):
   361     def items(self):
   362         return [item for item in super(CWRegistryStore, self).items()
   362         return [item for item in super(CWRegistryStore, self).items()
   363                 if not item[0] in ('propertydefs', 'propertyvalues')]
   363                 if not item[0] in ('propertydefs', 'propertyvalues')]
       
   364 
   364     def iteritems(self):
   365     def iteritems(self):
   365         return (item for item in super(CWRegistryStore, self).items()
   366         return (item for item in super(CWRegistryStore, self).items()
   366                 if not item[0] in ('propertydefs', 'propertyvalues'))
   367                 if not item[0] in ('propertydefs', 'propertyvalues'))
   367 
   368 
   368     def values(self):
   369     def values(self):
   369         return [value for key, value in self.items()]
   370         return [value for key, value in self.items()]
       
   371 
   370     def itervalues(self):
   372     def itervalues(self):
   371         return (value for key, value in self.items())
   373         return (value for key, value in self.items())
   372 
   374 
   373     def reset(self):
   375     def reset(self):
   374         CW_EVENT_MANAGER.emit('before-registry-reset', self)
   376         CW_EVENT_MANAGER.emit('before-registry-reset', self)
   459             # if the fs code use some cubes not yet registered into the instance
   461             # if the fs code use some cubes not yet registered into the instance
   460             # we should cleanup sys.modules for those as well to avoid potential
   462             # we should cleanup sys.modules for those as well to avoid potential
   461             # bad class reference pb after reloading
   463             # bad class reference pb after reloading
   462             cfg = self.config
   464             cfg = self.config
   463             for cube in cfg.expand_cubes(cubes, with_recommends=True):
   465             for cube in cfg.expand_cubes(cubes, with_recommends=True):
   464                 if not cube in cubes:
   466                 if cube not in cubes:
   465                     cube_modnames = cfg.appobjects_cube_modnames(cube)
   467                     cube_modnames = cfg.appobjects_cube_modnames(cube)
   466                     self._cleanup_sys_modules(cube_modnames)
   468                     self._cleanup_sys_modules(cube_modnames)
   467         self.register_modnames(modnames)
   469         self.register_modnames(modnames)
   468         CW_EVENT_MANAGER.emit('after-registry-reload')
   470         CW_EVENT_MANAGER.emit('after-registry-reload')
   469 
   471 
   535                 else:
   537                 else:
   536                     self.debug('unregister %s (no %s object in registry %s)',
   538                     self.debug('unregister %s (no %s object in registry %s)',
   537                                registry.objid(obj), ' or '.join(regids), regname)
   539                                registry.objid(obj), ' or '.join(regids), regname)
   538                     self.unregister(obj)
   540                     self.unregister(obj)
   539         super(CWRegistryStore, self).initialization_completed()
   541         super(CWRegistryStore, self).initialization_completed()
   540         if 'uicfg' in self: # 'uicfg' is not loaded in a pure repository mode
   542         if 'uicfg' in self:  # 'uicfg' is not loaded in a pure repository mode
   541             for rtags in self['uicfg'].values():
   543             for rtags in self['uicfg'].values():
   542                 for rtag in rtags:
   544                 for rtag in rtags:
   543                     # don't check rtags if we don't want to cleanup_unused_appobjects
   545                     # don't check rtags if we don't want to cleanup_unused_appobjects
   544                     rtag.init(self.schema, check=self.config.cleanup_unused_appobjects)
   546                     rtag.init(self.schema, check=self.config.cleanup_unused_appobjects)
   545 
   547 
   614         except (TypeError, ValueError):
   616         except (TypeError, ValueError):
   615             raise ValueError(_('bad value'))
   617             raise ValueError(_('bad value'))
   616         vocab = pdef['vocabulary']
   618         vocab = pdef['vocabulary']
   617         if vocab is not None:
   619         if vocab is not None:
   618             if callable(vocab):
   620             if callable(vocab):
   619                 vocab = vocab(None) # XXX need a req object
   621                 vocab = vocab(None)  # XXX need a req object
   620             if not value in vocab:
   622             if value not in vocab:
   621                 raise ValueError(_('unauthorized value'))
   623                 raise ValueError(_('unauthorized value'))
   622         return value
   624         return value
   623 
   625 
   624     def init_properties(self, propvalues):
   626     def init_properties(self, propvalues):
   625         """init the property values registry using the given set of couple (key, value)
   627         """init the property values registry using the given set of couple (key, value)
   638 
   640 
   639 
   641 
   640 # XXX unify with yams.constraints.BASE_CONVERTERS?
   642 # XXX unify with yams.constraints.BASE_CONVERTERS?
   641 YAMS_TO_PY = BASE_CONVERTERS.copy()
   643 YAMS_TO_PY = BASE_CONVERTERS.copy()
   642 YAMS_TO_PY.update({
   644 YAMS_TO_PY.update({
   643     'Bytes':      Binary,
   645     'Bytes': Binary,
   644     'Date':       date,
   646     'Date': date,
   645     'Datetime':   datetime,
   647     'Datetime': datetime,
   646     'TZDatetime': datetime,
   648     'TZDatetime': datetime,
   647     'Time':       time,
   649     'Time': time,
   648     'TZTime':     time,
   650     'TZTime': time,
   649     'Interval':   timedelta,
   651     'Interval': timedelta,
   650     })
   652 })