start works on storage

This commit is contained in:
Emmanuel Garette 2014-04-12 22:47:52 +02:00
parent 194c82faad
commit 299e51e806
5 changed files with 44 additions and 21 deletions

View File

@ -19,9 +19,9 @@ def test_list():
o = OptionDescription('od', '', [b]) o = OptionDescription('od', '', [b])
c = Config(o, session_id='test_non_persistent') c = Config(o, session_id='test_non_persistent')
c.cfgimpl_get_settings().remove('cache') c.cfgimpl_get_settings().remove('cache')
assert 'test_non_persistent' in list_sessions() assert 'test_non_persistent' in list_sessions('config')
del(c) del(c)
assert 'test_non_persistent' not in list_sessions() assert 'test_non_persistent' not in list_sessions('config')
def test_create_persistent(): def test_create_persistent():
@ -43,7 +43,7 @@ def test_list_sessions_persistent():
# storage is not persistent # storage is not persistent
pass pass
else: else:
assert 'test_persistent' in list_sessions() assert 'test_persistent' in list_sessions('config')
def test_delete_session_persistent(): def test_delete_session_persistent():
@ -55,9 +55,9 @@ def test_delete_session_persistent():
# storage is not persistent # storage is not persistent
pass pass
else: else:
assert 'test_persistent' in list_sessions() assert 'test_persistent' in list_sessions('config')
delete_session('test_persistent') delete_session('test_persistent')
assert 'test_persistent' not in list_sessions() assert 'test_persistent' not in list_sessions('config')
def test_create_persistent_retrieve(): def test_create_persistent_retrieve():
@ -77,7 +77,7 @@ def test_create_persistent_retrieve():
c = Config(o, session_id='test_persistent', persistent=True) c = Config(o, session_id='test_persistent', persistent=True)
c.cfgimpl_get_settings().remove('cache') c.cfgimpl_get_settings().remove('cache')
assert c.b is True assert c.b is True
assert 'test_persistent' in list_sessions() assert 'test_persistent' in list_sessions('config')
delete_session('test_persistent') delete_session('test_persistent')
c = Config(o, session_id='test_persistent', persistent=True) c = Config(o, session_id='test_persistent', persistent=True)
c.cfgimpl_get_settings().remove('cache') c.cfgimpl_get_settings().remove('cache')

View File

@ -545,11 +545,11 @@ class _CommonConfig(SubConfig):
for key, value in state.items(): for key, value in state.items():
if key not in ['_storage', '_impl_setting']: if key not in ['_storage', '_impl_setting']:
setattr(self, key, value) setattr(self, key, value)
set_storage(**state['_impl_setting']) set_storage('config', **state['_impl_setting'])
self._impl_context = weakref.ref(self) self._impl_context = weakref.ref(self)
self._impl_settings.context = weakref.ref(self) self._impl_settings.context = weakref.ref(self)
self._impl_values.context = weakref.ref(self) self._impl_values.context = weakref.ref(self)
storage = get_storage(test=self._impl_test, **state['_storage']) storage = get_storage('config', test=self._impl_test, **state['_storage'])
self._impl_values._impl_setstate(storage) self._impl_values._impl_setstate(storage)
self._impl_settings._impl_setstate(storage) self._impl_settings._impl_setstate(storage)
self._impl_meta = None self._impl_meta = None

View File

@ -31,10 +31,13 @@ from tiramisu.error import ConfigError, ConflictError, ValueWarning
from tiramisu.setting import groups, multitypes from tiramisu.setting import groups, multitypes
from tiramisu.i18n import _ from tiramisu.i18n import _
from tiramisu.autolib import carry_out_calculation from tiramisu.autolib import carry_out_calculation
from tiramisu.storage import get_storages_option
#FIXME : need storage... #FIXME : need storage...
from tiramisu.storage.dictionary.option import StorageBase, StorageOptionDescription #from tiramisu.storage.dictionary.option import StorageBase, StorageOptionDescription
#from tiramisu.storage.sqlalchemy.option import StorageBase, StorageOptionDescription #from tiramisu.storage.sqlalchemy.option import StorageBase, StorageOptionDescription
StorageBase, StorageOptionDescription = get_storages_option()
name_regexp = re.compile(r'^\d+') name_regexp = re.compile(r'^\d+')
forbidden_names = ('iter_all', 'iter_group', 'find', 'find_first', forbidden_names = ('iter_all', 'iter_group', 'find', 'find_first',

View File

@ -55,9 +55,8 @@ class StorageType(object):
def get(self): def get(self):
if self.storage_type is None: if self.storage_type is None:
self.storage_type = self.default_storage self.storage_type = self.default_storage
storage = self.storage_type
if self.mod is None: if self.mod is None:
modulepath = 'tiramisu.storage.{0}'.format(storage) modulepath = 'tiramisu.storage.{0}'.format(self.storage_type)
mod = __import__(modulepath) mod = __import__(modulepath)
for token in modulepath.split(".")[1:]: for token in modulepath.split(".")[1:]:
mod = getattr(mod, token) mod = getattr(mod, token)
@ -66,9 +65,10 @@ class StorageType(object):
storage_type = StorageType() storage_type = StorageType()
storage_option_type = StorageType()
def set_storage(name, **kwargs): def set_storage(type_, name, **kwargs):
"""Change storage's configuration """Change storage's configuration
:params name: is the storage name. If storage is already set, cannot :params name: is the storage name. If storage is already set, cannot
@ -76,6 +76,10 @@ def set_storage(name, **kwargs):
Other attributes are differents according to the selected storage's name Other attributes are differents according to the selected storage's name
""" """
if type_ == 'option':
storage_option_type.set(name)
setting = storage_option_type.get().setting
else:
storage_type.set(name) storage_type.set(name)
setting = storage_type.get().setting setting = storage_type.get().setting
for option, value in kwargs.items(): for option, value in kwargs.items():
@ -96,9 +100,12 @@ def _impl_getstate_setting():
return state return state
def get_storage(session_id, persistent, test): def get_storage(type_, session_id, persistent, test):
"""all used when __setstate__ a Config """all used when __setstate__ a Config
""" """
if type_ == 'option':
return storage_option_type.get().Storage(session_id, persistent, test)
else:
return storage_type.get().Storage(session_id, persistent, test) return storage_type.get().Storage(session_id, persistent, test)
@ -113,17 +120,28 @@ def get_storages(context, session_id, persistent):
return imp.Settings(storage), imp.Values(storage) return imp.Settings(storage), imp.Values(storage)
def list_sessions(): def get_storages_option():
imp = storage_option_type.get()
return imp.Base, imp.OptionDescription
def list_sessions(type_):
"""List all available session (persistent or not persistent) """List all available session (persistent or not persistent)
""" """
if type_ == 'option':
return storage_option_type.get().list_sessions()
else:
return storage_type.get().list_sessions() return storage_type.get().list_sessions()
def delete_session(session_id): def delete_session(type_, session_id):
"""Delete a selected session, be careful, you can deleted a session """Delete a selected session, be careful, you can deleted a session
use by an other instance use by an other instance
:params session_id: id of session to delete :params session_id: id of session to delete
""" """
if type_ == 'option':
return storage_option_type.get().delete_session(session_id)
else:
return storage_type.get().delete_session(session_id) return storage_type.get().delete_session(session_id)

View File

@ -27,5 +27,7 @@ use it. But if something goes wrong, you will lost your modifications.
from .value import Values from .value import Values
from .setting import Settings from .setting import Settings
from .storage import setting, Storage, list_sessions, delete_session from .storage import setting, Storage, list_sessions, delete_session
from .option import Base, OptionDescription
__all__ = (setting, Values, Settings, Storage, list_sessions, delete_session) __all__ = (setting, Values, Settings, Storage, list_sessions, delete_session,
Base, OptionDescription)