better support for sqlalchemy storage
This commit is contained in:
@ -100,6 +100,9 @@ rw_append = set(['frozen', 'disabled', 'validator', 'hidden'])
|
||||
rw_remove = set(['permissive', 'everything_frozen', 'mandatory'])
|
||||
|
||||
|
||||
forbidden_set_properties = set(['force_store_value'])
|
||||
|
||||
|
||||
log = getLogger('tiramisu')
|
||||
#FIXME
|
||||
#import logging
|
||||
@ -253,7 +256,7 @@ class Property(object):
|
||||
'this property is calculated').format(
|
||||
propname, self._opt.impl_getname()))
|
||||
self._properties.add(propname)
|
||||
self._setting._setproperties(self._properties, self._opt, self._path)
|
||||
self._setting._setproperties(self._properties, self._path)
|
||||
|
||||
def remove(self, propname):
|
||||
"""Removes a property named propname
|
||||
@ -263,8 +266,7 @@ class Property(object):
|
||||
"""
|
||||
if propname in self._properties:
|
||||
self._properties.remove(propname)
|
||||
self._setting._setproperties(self._properties, self._opt,
|
||||
self._path)
|
||||
self._setting._setproperties(self._properties, self._path)
|
||||
|
||||
def extend(self, propnames):
|
||||
"""Extends properties to the existing properties
|
||||
@ -347,7 +349,7 @@ class Settings(object):
|
||||
else:
|
||||
if opt is not None and _path is None:
|
||||
_path = opt.impl_getpath(self._getcontext())
|
||||
self._p_.reset_properties(_path)
|
||||
self._p_.delproperties(_path)
|
||||
self._getcontext().cfgimpl_reset_cache()
|
||||
|
||||
def _getproperties(self, opt=None, path=None, _is_apply_req=True):
|
||||
@ -367,7 +369,7 @@ class Settings(object):
|
||||
is_cached, props = self._p_.getcache(path, ntime)
|
||||
if is_cached:
|
||||
return copy(props)
|
||||
props = self._p_.getproperties(path, opt._properties)
|
||||
props = self._p_.getproperties(path, opt.impl_getproperties())
|
||||
if _is_apply_req:
|
||||
props = copy(props)
|
||||
props |= self.apply_requires(opt, path)
|
||||
@ -383,33 +385,28 @@ class Settings(object):
|
||||
"puts property propname in the Config's properties attribute"
|
||||
props = self._p_.getproperties(None, default_properties)
|
||||
props.add(propname)
|
||||
self._setproperties(props, None, None)
|
||||
self._setproperties(props, None)
|
||||
|
||||
def remove(self, propname):
|
||||
"deletes property propname in the Config's properties attribute"
|
||||
props = self._p_.getproperties(None, default_properties)
|
||||
if propname in props:
|
||||
props.remove(propname)
|
||||
self._setproperties(props, None, None)
|
||||
self._setproperties(props, None)
|
||||
|
||||
def extend(self, propnames):
|
||||
for propname in propnames:
|
||||
self.append(propname)
|
||||
|
||||
def _setproperties(self, properties, opt, path):
|
||||
"""save properties for specified opt
|
||||
def _setproperties(self, properties, path):
|
||||
"""save properties for specified path
|
||||
(never save properties if same has option properties)
|
||||
"""
|
||||
if opt is None:
|
||||
self._p_.setproperties(None, properties)
|
||||
else:
|
||||
#if opt._calc_properties is not None:
|
||||
# properties -= opt._calc_properties
|
||||
#if set(opt._properties) == properties:
|
||||
# self._p_.reset_properties(path)
|
||||
#else:
|
||||
# self._p_.setproperties(path, properties)
|
||||
self._p_.setproperties(path, properties)
|
||||
forbidden_properties = forbidden_set_properties & properties
|
||||
if forbidden_properties:
|
||||
raise ConfigError(_('cannot add those properties: {0}').format(
|
||||
' '.join(forbidden_properties)))
|
||||
self._p_.setproperties(path, properties)
|
||||
self._getcontext().cfgimpl_reset_cache()
|
||||
|
||||
#____________________________________________________________
|
||||
@ -622,15 +619,6 @@ class Settings(object):
|
||||
def get_modified_permissives(self):
|
||||
return self._p_.get_modified_permissives()
|
||||
|
||||
def get_with_property(self, propname):
|
||||
opts, paths = self._getcontext().cfgimpl_get_description(
|
||||
)._cache_paths
|
||||
for index in range(0, len(paths)):
|
||||
opt = opts[index]
|
||||
path = paths[index]
|
||||
if propname in self._getproperties(opt, path, False):
|
||||
yield (opt, path)
|
||||
|
||||
def __getstate__(self):
|
||||
return {'_p_': self._p_, '_owner': str(self._owner)}
|
||||
|
||||
|
Reference in New Issue
Block a user