add enumerate and delete method for manage storage
This commit is contained in:
parent
dc2c173b44
commit
6b9d5aed59
4 changed files with 45 additions and 15 deletions
|
@ -506,7 +506,7 @@ class Config(CommonConfig):
|
||||||
"main configuration management entry"
|
"main configuration management entry"
|
||||||
__slots__ = tuple()
|
__slots__ = tuple()
|
||||||
|
|
||||||
def __init__(self, descr, config_id=None, is_persistent=False):
|
def __init__(self, descr, session_id=None, is_persistent=False):
|
||||||
""" Configuration option management master class
|
""" Configuration option management master class
|
||||||
|
|
||||||
:param descr: describes the configuration schema
|
:param descr: describes the configuration schema
|
||||||
|
@ -514,7 +514,7 @@ class Config(CommonConfig):
|
||||||
:param context: the current root config
|
:param context: the current root config
|
||||||
:type context: `Config`
|
:type context: `Config`
|
||||||
"""
|
"""
|
||||||
storage = get_storage(self, config_id, is_persistent)
|
storage = get_storage(self, session_id, is_persistent)
|
||||||
self._impl_settings = Settings(self, storage)
|
self._impl_settings = Settings(self, storage)
|
||||||
self._impl_values = Values(self, storage)
|
self._impl_values = Values(self, storage)
|
||||||
super(Config, self).__init__(descr, self)
|
super(Config, self).__init__(descr, self)
|
||||||
|
@ -534,7 +534,7 @@ class Config(CommonConfig):
|
||||||
class MetaConfig(CommonConfig):
|
class MetaConfig(CommonConfig):
|
||||||
__slots__ = ('_impl_children',)
|
__slots__ = ('_impl_children',)
|
||||||
|
|
||||||
def __init__(self, children, meta=True, config_id=None, is_persistent=False):
|
def __init__(self, children, meta=True, session_id=None, is_persistent=False):
|
||||||
if not isinstance(children, list):
|
if not isinstance(children, list):
|
||||||
raise ValueError(_("metaconfig's children must be a list"))
|
raise ValueError(_("metaconfig's children must be a list"))
|
||||||
self._impl_descr = None
|
self._impl_descr = None
|
||||||
|
@ -555,7 +555,7 @@ class MetaConfig(CommonConfig):
|
||||||
child._impl_meta = self
|
child._impl_meta = self
|
||||||
|
|
||||||
self._impl_children = children
|
self._impl_children = children
|
||||||
storage = get_storage(self, config_id, is_persistent)
|
storage = get_storage(self, session_id, is_persistent)
|
||||||
self._impl_settings = Settings(self, storage)
|
self._impl_settings = Settings(self, storage)
|
||||||
self._impl_values = Values(self, storage)
|
self._impl_values = Values(self, storage)
|
||||||
self._impl_meta = None
|
self._impl_meta = None
|
||||||
|
|
|
@ -34,7 +34,7 @@ ro_append = ('frozen', 'disabled', 'validator', 'everything_frozen',
|
||||||
rw_remove = ('permissive', 'everything_frozen', 'mandatory')
|
rw_remove = ('permissive', 'everything_frozen', 'mandatory')
|
||||||
rw_append = ('frozen', 'disabled', 'validator', 'hidden')
|
rw_append = ('frozen', 'disabled', 'validator', 'hidden')
|
||||||
default_properties = ('expire', 'validator')
|
default_properties = ('expire', 'validator')
|
||||||
storage_type = 'sqlite3'
|
storage_type = 'dictionary'
|
||||||
|
|
||||||
|
|
||||||
class _const:
|
class _const:
|
||||||
|
@ -189,15 +189,15 @@ def set_storage(name):
|
||||||
storage_type = name
|
storage_type = name
|
||||||
|
|
||||||
|
|
||||||
def get_storage(context, config_id, is_persistent):
|
def get_storage(context, session_id, is_persistent):
|
||||||
def gen_id(config):
|
def gen_id(config):
|
||||||
return str(id(config)) + str(time())
|
return str(id(config)) + str(time())
|
||||||
|
|
||||||
if config_id is None:
|
if session_id is None:
|
||||||
config_id = gen_id(context)
|
session_id = gen_id(context)
|
||||||
import_lib = 'tiramisu.storage.{0}.storage'.format(storage_type)
|
import_lib = 'tiramisu.storage.{0}.storage'.format(storage_type)
|
||||||
return __import__(import_lib, globals(), locals(), ['Storage'],
|
return __import__(import_lib, globals(), locals(), ['Storage'],
|
||||||
-1).Storage(config_id, is_persistent)
|
-1).Storage(session_id, is_persistent)
|
||||||
|
|
||||||
|
|
||||||
#____________________________________________________________
|
#____________________________________________________________
|
||||||
|
|
|
@ -20,13 +20,22 @@
|
||||||
|
|
||||||
|
|
||||||
from tiramisu.i18n import _
|
from tiramisu.i18n import _
|
||||||
|
from tiramisu.error import ConfigError
|
||||||
|
|
||||||
|
|
||||||
|
def enumerate():
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def delete(session_id):
|
||||||
|
raise ConfigError(_('dictionary storage cannot delete session'))
|
||||||
|
|
||||||
|
|
||||||
class Storage(object):
|
class Storage(object):
|
||||||
__slots__ = tuple()
|
__slots__ = tuple()
|
||||||
storage = 'dictionary'
|
storage = 'dictionary'
|
||||||
|
|
||||||
def __init__(self, config_id, is_persistent):
|
def __init__(self, session_id, is_persistent):
|
||||||
if is_persistent:
|
if is_persistent:
|
||||||
raise ValueError(_('a dictionary cannot be persistent'))
|
raise ValueError(_('a dictionary cannot be persistent'))
|
||||||
|
|
||||||
|
|
|
@ -20,17 +20,38 @@
|
||||||
|
|
||||||
from pickle import dumps, loads
|
from pickle import dumps, loads
|
||||||
from os import unlink
|
from os import unlink
|
||||||
|
from os.path import basename, splitext, join
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
from glob import glob
|
||||||
|
|
||||||
|
|
||||||
|
extension = 'db'
|
||||||
|
dir_database = '/tmp'
|
||||||
|
|
||||||
|
|
||||||
|
def _gen_filename(name):
|
||||||
|
return join(dir_database, '{0}.{1}'.format(name, extension))
|
||||||
|
|
||||||
|
|
||||||
|
def enumerate():
|
||||||
|
names = []
|
||||||
|
for filename in glob(_gen_filename('*')):
|
||||||
|
names.append(basename(splitext(filename)[0]))
|
||||||
|
return names
|
||||||
|
|
||||||
|
|
||||||
|
def delete(session_id):
|
||||||
|
unlink(_gen_filename(session_id))
|
||||||
|
|
||||||
|
|
||||||
class Storage(object):
|
class Storage(object):
|
||||||
__slots__ = ('_conn', '_cursor', 'is_persistent', 'db_file')
|
__slots__ = ('_conn', '_cursor', 'is_persistent', '_session_id')
|
||||||
storage = 'sqlite3'
|
storage = 'sqlite3'
|
||||||
|
|
||||||
def __init__(self, config_id, is_persistent):
|
def __init__(self, session_id, is_persistent):
|
||||||
self.is_persistent = is_persistent
|
self.is_persistent = is_persistent
|
||||||
self.db_file = config_id + '.db'
|
self._session_id = session_id
|
||||||
self._conn = sqlite3.connect(self.db_file)
|
self._conn = sqlite3.connect(_gen_filename(self._session_id))
|
||||||
self._conn.text_factory = str
|
self._conn.text_factory = str
|
||||||
self._cursor = self._conn.cursor()
|
self._cursor = self._conn.cursor()
|
||||||
|
|
||||||
|
@ -52,7 +73,7 @@ class Storage(object):
|
||||||
self._cursor.close()
|
self._cursor.close()
|
||||||
self._conn.close()
|
self._conn.close()
|
||||||
if not self.is_persistent:
|
if not self.is_persistent:
|
||||||
unlink(self.db_file)
|
delete(self._session_id)
|
||||||
|
|
||||||
|
|
||||||
class Cache(object):
|
class Cache(object):
|
||||||
|
|
Loading…
Reference in a new issue