copy context owner when user copied a config/metaconfig

Context owner is now in values (no more in settings).
The context owner is set in storage.
So when copy/deepcopy a config, owner is copied to.
For user, when export values, context owner is not returned by default.
This commit is contained in:
2018-09-15 10:34:15 +02:00
parent e021e26d5a
commit 87594307c9
7 changed files with 98 additions and 27 deletions

View File

@ -763,9 +763,18 @@ class TiramisuContextValue(TiramisuContext):
withoption=withoption,
withvalue=withvalue)
def exportation(self):
def exportation(self,
with_default_owner: bool=False):
"""export all values"""
return self.config_bag.context.cfgimpl_get_values()._p_.exportation()
exportation = self.config_bag.context.cfgimpl_get_values()._p_.exportation()
if not with_default_owner:
exportation = [list(exportation[0]), list(exportation[1]), list(exportation[2]), list(exportation[3])]
index = exportation[0].index(None)
exportation[0].pop(index)
exportation[1].pop(index)
exportation[2].pop(index)
exportation[3].pop(index)
return exportation
def importation(self, values):
"""import values"""
@ -778,7 +787,7 @@ class TiramisuContextOwner(TiramisuContext):
def get(self):
"""get default owner"""
return self.config_bag.context.cfgimpl_get_settings().getowner()
return self.config_bag.context.cfgimpl_get_values().get_context_owner()
def set(self, owner):
"""set default owner"""
@ -787,7 +796,7 @@ class TiramisuContextOwner(TiramisuContext):
except AttributeError:
owners.addowner(owner)
obj_owner = getattr(owners, owner)
self.config_bag.context.cfgimpl_get_settings().setowner(obj_owner)
self.config_bag.context.cfgimpl_get_values().set_context_owner(obj_owner)
class TiramisuContextProperty(TiramisuContext):

View File

@ -1135,7 +1135,7 @@ class KernelMetaConfig(KernelGroupConfig):
session_id,
type_='config',
persistent=False):
if session_id in [child._impl_name for child in self._impl_children]: # pragma: no cover
if session_id in [child._impl_name for child in self._impl_children]:
raise ConflictError(_('config name must be uniq in '
'groupconfig for {0}').format(session_id))
if type_ == 'config':
@ -1147,7 +1147,7 @@ class KernelMetaConfig(KernelGroupConfig):
optiondescription=self._impl_descr,
session_id=session_id,
persistent=persistent)
else:
else: # pragma: no cover
raise ConfigError(_('unknown type {}').format(type_))
# Copy context properties/permissives
config.cfgimpl_get_settings().set_context_properties(self.cfgimpl_get_settings().get_context_properties(), config)

View File

@ -325,7 +325,9 @@ undefined = Undefined()
#____________________________________________________________
class Settings(object):
"``config.Config()``'s configuration options settings"
__slots__ = ('_owner', '_p_', '_pp_', '__weakref__')
__slots__ = ('_p_',
'_pp_',
'__weakref__')
def __init__(self,
properties,
@ -340,7 +342,6 @@ class Settings(object):
- sqlite3 -> persistent
"""
# generic owner
self._owner = owners.user
self._p_ = properties
self._pp_ = permissives
@ -779,17 +780,3 @@ class Settings(object):
self._read(rw_remove,
rw_append,
context)
#____________________________________________________________
# default owner methods
def setowner(self,
owner):
":param owner: sets the default value for owner at the Config level"
if owner in forbidden_owners:
raise ValueError(_('set owner "{0}" is forbidden').format(str(owner)))
self._owner = owner
def getowner(self):
return self._owner

View File

@ -183,7 +183,10 @@ class Values(Cache):
self._values = tuple(values)
# owner
def setowner(self, path, owner, index=None):
def setowner(self,
path,
owner,
index=None):
"""change owner for a path
"""
idx = self._values[0].index(path)

View File

@ -31,7 +31,8 @@ class Values(object):
'__weakref__')
def __init__(self,
storage):
storage,
default_owner=owners.user):
"""
Initializes the values's dict.
@ -40,6 +41,12 @@ class Values(object):
"""
# store the storage
self._p_ = storage
# set default owner
self._p_.setvalue(None,
None,
default_owner,
None,
True)
#______________________________________________________________________
# get value
@ -253,7 +260,7 @@ class Values(object):
_commit):
context = option_bag.config_bag.context
owner = context.cfgimpl_get_settings().getowner()
owner = self.get_context_owner()
if 'validator' in option_bag.config_bag.properties:
if option_bag.index is not None or option_bag.option._has_consistencies(context):
# set value to a fake config when option has dependency
@ -610,3 +617,19 @@ class Values(object):
[],
context,
od_config_bag)
#____________________________________________________________
# default owner methods
def set_context_owner(self,
owner):
":param owner: sets the default value for owner at the Config level"
if owner in forbidden_owners:
raise ValueError(_('set owner "{0}" is forbidden').format(str(owner)))
self._p_.setowner(None,
owner,
index=None)
def get_context_owner(self):
return self._p_.getowner(None,
None)