we can personalise storage easily

This commit is contained in:
2013-08-20 09:47:12 +02:00
parent df7d6759cd
commit e826f3d1c6
12 changed files with 237 additions and 242 deletions

View File

@ -24,8 +24,6 @@ from time import time
from copy import copy
from tiramisu.error import RequirementError, PropertiesOptionError
from tiramisu.i18n import _
#from tiramisu.plugins.dictionary.setting import PluginSettings
from tiramisu.plugins.sqlite3.setting import PluginSettings
default_encoding = 'utf-8'
@ -35,6 +33,7 @@ ro_append = ('frozen', 'disabled', 'validator', 'everything_frozen', 'mandatory'
rw_remove = ('permissive', 'everything_frozen', 'mandatory')
rw_append = ('frozen', 'disabled', 'validator', 'hidden')
default_properties = ('expire', 'validator')
default_storage = 'dictionary'
class _const:
@ -179,15 +178,26 @@ class Property(object):
#____________________________________________________________
class Settings(PluginSettings):
class Settings(object):
"``Config()``'s configuration options"
__slots__ = ('context', '_owner')
__slots__ = ('context', '_owner', '_p_')
def __init__(self, context, config_id):
def __init__(self, context, config_id, plugin_name):
# generic owner
self._owner = owners.user
self.context = context
super(Settings, self).__init__(config_id)
import_lib = 'tiramisu.plugins.{0}.setting'.format(plugin_name)
self._p_ = __import__(import_lib, globals(), locals(), ['Settings'],
-1).Settings(config_id)
def _getkey(self, opt):
if self._p_.key_is_path:
if opt is None:
return '_none'
else:
return self._get_opt_path(opt)
else:
return opt
#____________________________________________________________
# properties methods
@ -208,28 +218,28 @@ class Settings(PluginSettings):
raise ValueError(_('opt and all_properties must not be set '
'together in reset'))
if all_properties:
self._p_reset_all_propertives()
self._p_.reset_all_propertives()
else:
self._p_reset_properties(opt)
self._p_.reset_properties(self._getkey(opt))
self.context.cfgimpl_reset_cache()
def _getproperties(self, opt=None, is_apply_req=True):
if opt is None:
props = self._p_getproperties(opt, default_properties)
props = self._p_.getproperties(self._getkey(opt), default_properties)
else:
ntime = None
if self._p_hascache('property', opt):
if self._p_.hascache('property', self._getkey(opt)):
ntime = time()
is_cached, props = self._p_getcache('property', opt, ntime)
is_cached, props = self._p_.getcache('property', self._getkey(opt), ntime)
if is_cached:
return props
if is_apply_req:
self.apply_requires(opt)
props = self._p_getproperties(opt, opt._properties)
props = self._p_.getproperties(self._getkey(opt), opt._properties)
if 'expire' in self:
if ntime is None:
ntime = time()
self._p_setcache('property', opt, props, ntime + expires_time)
self._p_.setcache('property', self._getkey(opt), props, ntime + expires_time)
return props
def append(self, propname):
@ -245,12 +255,12 @@ class Settings(PluginSettings):
(never save properties if same has option properties)
"""
if opt is None:
self._p_setproperties(opt, properties)
self._p_.setproperties(self._getkey(opt), properties)
else:
if set(opt._properties) == properties:
self._p_reset_properties(opt)
self._p_.reset_properties(self._getkey(opt))
else:
self._p_setproperties(opt, properties)
self._p_.setproperties(self._getkey(opt), properties)
self.context.cfgimpl_reset_cache()
#____________________________________________________________
@ -260,11 +270,11 @@ class Settings(PluginSettings):
#opt properties
properties = copy(self._getproperties(opt_or_descr))
#remove opt permissive
properties -= self._p_getpermissive(opt_or_descr)
properties -= self._p_.getpermissive(self._getkey(opt_or_descr))
#remove global permissive if need
self_properties = copy(self._getproperties())
if force_permissive is True or 'permissive' in self_properties:
properties -= self._p_getpermissive()
properties -= self._p_.getpermissive()
#global properties
if force_properties is not None:
@ -300,7 +310,7 @@ class Settings(PluginSettings):
def set_permissive(self, permissive, opt=None):
if not isinstance(permissive, tuple):
raise TypeError(_('permissive must be a tuple'))
self._p_setpermissive(opt, permissive)
self._p_.setpermissive(self._getkey(opt), permissive)
#____________________________________________________________
def setowner(self, owner):
@ -329,9 +339,9 @@ class Settings(PluginSettings):
def reset_cache(self, only_expired):
if only_expired:
self._p_reset_expired_cache('property', time())
self._p_.reset_expired_cache('property', time())
else:
self._p_reset_all_cache('property')
self._p_.reset_all_cache('property')
def apply_requires(self, opt):
"carries out the jit (just in time requirements between options"