support multiple metaconfig and prefix
This commit is contained in:
@ -990,13 +990,15 @@ class TiramisuContextConfig(TiramisuContext):
|
||||
def _c_deepcopy(self,
|
||||
session_id=None,
|
||||
persistent=False,
|
||||
storage=None):
|
||||
storage=None,
|
||||
metaconfig_prefix=None):
|
||||
return Config(self.config_bag.context.duplicate(session_id,
|
||||
persistent=persistent,
|
||||
storage=storage,
|
||||
metaconfig_prefix=metaconfig_prefix,
|
||||
deep=True))
|
||||
|
||||
def _c_meta(self):
|
||||
def _c_metaconfig(self):
|
||||
return Config(self.config_bag.context.cfgimpl_get_meta())
|
||||
|
||||
def _m_new(self,
|
||||
|
@ -682,41 +682,49 @@ class _CommonConfig(SubConfig):
|
||||
force_settings=None,
|
||||
storage=None,
|
||||
persistent=False,
|
||||
metaconfig_prefix=None,
|
||||
child=None,
|
||||
deep=False):
|
||||
if isinstance(self, KernelConfig):
|
||||
config = KernelConfig(self._impl_descr,
|
||||
_duplicate=True,
|
||||
session_id=session_id,
|
||||
force_values=force_values,
|
||||
force_settings=force_settings,
|
||||
persistent=persistent,
|
||||
storage=storage)
|
||||
duplicated_config = KernelConfig(self._impl_descr,
|
||||
_duplicate=True,
|
||||
session_id=session_id,
|
||||
force_values=force_values,
|
||||
force_settings=force_settings,
|
||||
persistent=persistent,
|
||||
storage=storage)
|
||||
elif isinstance(self, KernelMetaConfig):
|
||||
config = KernelMetaConfig([],
|
||||
_duplicate=True,
|
||||
optiondescription=self._impl_descr,
|
||||
session_id=session_id,
|
||||
force_values=force_values,
|
||||
force_settings=force_settings,
|
||||
persistent=persistent,
|
||||
storage=storage)
|
||||
if session_id is None and metaconfig_prefix is not None:
|
||||
session_id = metaconfig_prefix + self.impl_getname()
|
||||
duplicated_config = KernelMetaConfig([],
|
||||
_duplicate=True,
|
||||
optiondescription=self._impl_descr,
|
||||
session_id=session_id,
|
||||
force_values=force_values,
|
||||
force_settings=force_settings,
|
||||
persistent=persistent,
|
||||
storage=storage)
|
||||
else:
|
||||
raise Exception('hu?')
|
||||
config.cfgimpl_get_values()._p_.importation(self.cfgimpl_get_values()._p_.exportation())
|
||||
config.cfgimpl_get_settings()._p_.importation(self.cfgimpl_get_settings(
|
||||
raise Exception(_('unknown type'))
|
||||
duplicated_config.cfgimpl_get_values()._p_.importation(self.cfgimpl_get_values()._p_.exportation())
|
||||
duplicated_config.cfgimpl_get_settings()._p_.importation(self.cfgimpl_get_settings(
|
||||
)._p_.exportation())
|
||||
config.cfgimpl_get_settings()._pp_.importation(self.cfgimpl_get_settings(
|
||||
duplicated_config.cfgimpl_get_settings()._pp_.importation(self.cfgimpl_get_settings(
|
||||
)._pp_.exportation())
|
||||
if child is not None:
|
||||
duplicated_config._impl_children.append(child)
|
||||
child._impl_meta = weakref.ref(duplicated_config)
|
||||
if self._impl_meta:
|
||||
if deep:
|
||||
meta = self._impl_meta().duplicate(deep=deep, storage=storage, persistent=persistent)
|
||||
meta._impl_children.append(config)
|
||||
config._impl_meta = weakref.ref(meta)
|
||||
config = meta
|
||||
duplicated_config = self._impl_meta().duplicate(deep=deep,
|
||||
storage=storage,
|
||||
metaconfig_prefix=metaconfig_prefix,
|
||||
child=duplicated_config,
|
||||
persistent=persistent)
|
||||
else:
|
||||
config._impl_meta = self._impl_meta
|
||||
config._impl_meta()._impl_children.append(config)
|
||||
return config
|
||||
duplicated_config._impl_meta = self._impl_meta
|
||||
self._impl_meta()._impl_children.append(duplicated_config)
|
||||
return duplicated_config
|
||||
|
||||
|
||||
# ____________________________________________________________
|
||||
|
Reference in New Issue
Block a user