def __getattr__(self, attr): if attr in self.__dict__: return self.__dict__[attr] data = self.__dict__['_data'] from rez.plugin_managers import plugin_manager if attr in plugin_manager.get_plugin_types(): # get plugin config data, and apply overrides plugin_type = attr config_data = plugin_manager.get_plugin_config_data(plugin_type) d = copy.deepcopy(config_data) deep_update(d, data.get(plugin_type, {})) # validate schema = plugin_manager.get_plugin_config_schema(plugin_type) try: d = schema.validate(d) except SchemaError as e: raise ConfigurationError( "Error in Rez configuration under plugins.%s: %s" % (plugin_type, str(e))) elif attr in data: d = data[attr] else: raise AttributeError( "No such configuration setting: 'plugins.%s'" % attr) d_ = convert_dicts(d, RO_AttrDictWrapper) self.__dict__[attr] = d_ return d_
def __getattr__(self, attr): if attr in self.__dict__: return self.__dict__[attr] data = self.__dict__['_data'] from rez.plugin_managers import plugin_manager if attr in plugin_manager.get_plugin_types(): # get plugin config data, and apply overrides plugin_type = attr config_data = plugin_manager.get_plugin_config_data(plugin_type) d = copy.deepcopy(config_data) deep_update(d, data.get(plugin_type, {})) # validate schema = plugin_manager.get_plugin_config_schema(plugin_type) try: d = schema.validate(d) except SchemaError as e: raise ConfigurationError( "Error in Rez configuration under plugins.%s: %s" % (plugin_type, str(e))) elif attr in data: d = data[attr] else: raise AttributeError("No such configuration setting: 'plugins.%s'" % attr) d_ = convert_dicts(d, RO_AttrDictWrapper) self.__dict__[attr] = d_ return d_
def override(self, key, value): def _nosuch(): raise AttributeError("no such setting: %r" % ".".join(key)) if len(key) < 2: _nosuch() from rez.plugin_managers import plugin_manager if key[0] not in plugin_manager.get_plugin_types(): _nosuch() plugin_type = key[0] key = key[1:] data = {} new_overrides = {plugin_type: data} while len(key) > 1: data_ = {} data[key[0]] = data_ data = data_ key = key[1:] data[key[0]] = value deep_update(self.__dict__["_data"], new_overrides) if plugin_type in self.__dict__: del self.__dict__[plugin_type] # uncache
def data(self): # force plugin configs to load from rez.plugin_managers import plugin_manager for plugin_type in plugin_manager.get_plugin_types(): getattr(self, plugin_type) d = self.__dict__.copy() del d["_data"] d = convert_dicts(d, dict, (dict, AttrDictWrapper)) return d
def override(self, key, value): def _nosuch(): raise AttributeError("no such setting: %r" % '.'.join(key)) if len(key) < 2: _nosuch() from rez.plugin_managers import plugin_manager if key[0] not in plugin_manager.get_plugin_types(): _nosuch() plugin_type = key[0] key = key[1:] data = {} new_overrides = {plugin_type: data} while len(key) > 1: data_ = {} data[key[0]] = data_ data = data_ key = key[1:] data[key[0]] = value deep_update(self.__dict__['_data'], new_overrides) if plugin_type in self.__dict__: del self.__dict__[plugin_type] # uncache
def __str__(self): from rez.plugin_managers import plugin_manager return "%r" % sorted(plugin_manager.get_plugin_types())
def __iter__(self): from rez.plugin_managers import plugin_manager return iter(plugin_manager.get_plugin_types())