From 299e51e806ba98929670b93d716bc8c185b9996d Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Sat, 12 Apr 2014 22:47:52 +0200 Subject: [PATCH] start works on storage --- test/test_storage.py | 12 ++++---- tiramisu/config.py | 4 +-- tiramisu/option.py | 5 +++- tiramisu/storage/__init__.py | 40 ++++++++++++++++++------- tiramisu/storage/dictionary/__init__.py | 4 ++- 5 files changed, 44 insertions(+), 21 deletions(-) diff --git a/test/test_storage.py b/test/test_storage.py index 0b2e3ac..fd3d743 100644 --- a/test/test_storage.py +++ b/test/test_storage.py @@ -19,9 +19,9 @@ def test_list(): o = OptionDescription('od', '', [b]) c = Config(o, session_id='test_non_persistent') c.cfgimpl_get_settings().remove('cache') - assert 'test_non_persistent' in list_sessions() + assert 'test_non_persistent' in list_sessions('config') del(c) - assert 'test_non_persistent' not in list_sessions() + assert 'test_non_persistent' not in list_sessions('config') def test_create_persistent(): @@ -43,7 +43,7 @@ def test_list_sessions_persistent(): # storage is not persistent pass else: - assert 'test_persistent' in list_sessions() + assert 'test_persistent' in list_sessions('config') def test_delete_session_persistent(): @@ -55,9 +55,9 @@ def test_delete_session_persistent(): # storage is not persistent pass else: - assert 'test_persistent' in list_sessions() + assert 'test_persistent' in list_sessions('config') delete_session('test_persistent') - assert 'test_persistent' not in list_sessions() + assert 'test_persistent' not in list_sessions('config') def test_create_persistent_retrieve(): @@ -77,7 +77,7 @@ def test_create_persistent_retrieve(): c = Config(o, session_id='test_persistent', persistent=True) c.cfgimpl_get_settings().remove('cache') assert c.b is True - assert 'test_persistent' in list_sessions() + assert 'test_persistent' in list_sessions('config') delete_session('test_persistent') c = Config(o, session_id='test_persistent', persistent=True) c.cfgimpl_get_settings().remove('cache') diff --git a/tiramisu/config.py b/tiramisu/config.py index f05d900..abc3261 100644 --- a/tiramisu/config.py +++ b/tiramisu/config.py @@ -545,11 +545,11 @@ class _CommonConfig(SubConfig): for key, value in state.items(): if key not in ['_storage', '_impl_setting']: setattr(self, key, value) - set_storage(**state['_impl_setting']) + set_storage('config', **state['_impl_setting']) self._impl_context = weakref.ref(self) self._impl_settings.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_settings._impl_setstate(storage) self._impl_meta = None diff --git a/tiramisu/option.py b/tiramisu/option.py index 2773ccf..fa0420a 100644 --- a/tiramisu/option.py +++ b/tiramisu/option.py @@ -31,10 +31,13 @@ from tiramisu.error import ConfigError, ConflictError, ValueWarning from tiramisu.setting import groups, multitypes from tiramisu.i18n import _ from tiramisu.autolib import carry_out_calculation +from tiramisu.storage import get_storages_option #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 +StorageBase, StorageOptionDescription = get_storages_option() + name_regexp = re.compile(r'^\d+') forbidden_names = ('iter_all', 'iter_group', 'find', 'find_first', diff --git a/tiramisu/storage/__init__.py b/tiramisu/storage/__init__.py index c232472..30e2057 100644 --- a/tiramisu/storage/__init__.py +++ b/tiramisu/storage/__init__.py @@ -55,9 +55,8 @@ class StorageType(object): def get(self): if self.storage_type is None: self.storage_type = self.default_storage - storage = self.storage_type if self.mod is None: - modulepath = 'tiramisu.storage.{0}'.format(storage) + modulepath = 'tiramisu.storage.{0}'.format(self.storage_type) mod = __import__(modulepath) for token in modulepath.split(".")[1:]: mod = getattr(mod, token) @@ -66,9 +65,10 @@ class StorageType(object): storage_type = StorageType() +storage_option_type = StorageType() -def set_storage(name, **kwargs): +def set_storage(type_, name, **kwargs): """Change storage's configuration :params name: is the storage name. If storage is already set, cannot @@ -76,8 +76,12 @@ def set_storage(name, **kwargs): Other attributes are differents according to the selected storage's name """ - storage_type.set(name) - setting = storage_type.get().setting + if type_ == 'option': + storage_option_type.set(name) + setting = storage_option_type.get().setting + else: + storage_type.set(name) + setting = storage_type.get().setting for option, value in kwargs.items(): try: getattr(setting, option) @@ -96,10 +100,13 @@ def _impl_getstate_setting(): return state -def get_storage(session_id, persistent, test): +def get_storage(type_, session_id, persistent, test): """all used when __setstate__ a Config """ - return storage_type.get().Storage(session_id, persistent, test) + if type_ == 'option': + return storage_option_type.get().Storage(session_id, persistent, test) + else: + return storage_type.get().Storage(session_id, persistent, test) def get_storages(context, session_id, persistent): @@ -113,18 +120,29 @@ def get_storages(context, session_id, persistent): 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) """ - return storage_type.get().list_sessions() + if type_ == 'option': + return storage_option_type.get().list_sessions() + else: + 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 use by an other instance :params session_id: id of session to delete """ - return storage_type.get().delete_session(session_id) + if type_ == 'option': + return storage_option_type.get().delete_session(session_id) + else: + return storage_type.get().delete_session(session_id) __all__ = (set_storage, list_sessions, delete_session) diff --git a/tiramisu/storage/dictionary/__init__.py b/tiramisu/storage/dictionary/__init__.py index bc81450..3a7b186 100644 --- a/tiramisu/storage/dictionary/__init__.py +++ b/tiramisu/storage/dictionary/__init__.py @@ -27,5 +27,7 @@ use it. But if something goes wrong, you will lost your modifications. from .value import Values from .setting import Settings 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)