support multiple metaconfig and prefix

This commit is contained in:
2018-09-13 17:00:52 +02:00
parent 77a77dd01c
commit f6a9b88795
3 changed files with 58 additions and 32 deletions

View File

@ -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,

View File

@ -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
# ____________________________________________________________