Provides a layer for storing key / value paires.
Project description
Introduction
This package provides a layer for storing key/value pairs. The storage can be configured dynamically by providing a IConfig adapter of the context on which the dict storage is used.
Examples
The adapter defaults to using a non-persistent dict:
>>> from ftw.dictstorage.interfaces import IDictStorage
>>> context = layer['example_context']
>>> print context
<ftw.dictstorage.testing.ExampleContext object at ...>
>>> storage = IDictStorage(context)
>>> storage['key'] = 'value'
>>> print storage['key']
value
>>> print storage.storage
{'key': 'value'}
>>> print IDictStorage(context).storage
{}
For configuring a custom storage, implement your own IConfig which uses custom IDictStorage:
>>> from ftw.dictstorage.interfaces import IConfig
>>> from ftw.dictstorage.base import DictStorage
>>> from zope.component import provideAdapter, adapts
>>> from zope.interface import Interface, alsoProvides, implements
>>> context = layer['example_context']
>>> class IMyContext(Interface):
... pass
>>> alsoProvides(context, IMyContext)
>>> class ContextStorageConfig(object):
... implements(IConfig)
... adapts(IMyContext)
...
... def __init__(self, context):
... self.context = context
...
... def get_storage(self):
... if not hasattr(self.context, '_dictstorage'):
... self.context._dictstorage = {}
... return self.context._dictstorage
>>> provideAdapter(ContextStorageConfig)
>>> class ContextDictStorage(DictStorage):
... implements(IDictStorage)
... adapts(IMyContext, IConfig)
...
... def __init__(self, context, config):
... self.context = context
... self.config = config
... self._storage = config.get_storage()
...
... @property
... def storage(self):
... return self._storage
...
>>> provideAdapter(ContextDictStorage)
>>> storage = IDictStorage(context)
>>> storage['foo'] = 'bar'
>>> print storage['foo']
bar
>>> print context._dictstorage
{'foo': 'bar'}
>>> print IDictStorage(context)['foo']
bar
Compatibility
Runs with Plone 4.2, 4.3, 5.1.
Links
Continuous integration: https://jenkins.4teamwork.ch/search?q=ftw.dictstorage
Copyright
This package is copyright by 4teamwork.
ftw.dictstorage is licensed under GNU General Public License, version 2.
Changelog
1.3.0 (2019-11-11)
Drop support for Plone 4.0 and 4.1. [jone]
Add support for Plone 5.1 [Nachtalb]
1.2 (2012-06-05)
Declare zope dependencies. [jone]
Update README. [jone]
1.1 (2012-03-28)
Remove “self” from IDictStorage interface definitions. This makes it possible to validate a implementation with verifyClass. [jone]
1.0 (2011-11-17)
added test-buildout for plone 4.1 [eschmutz]
1.0a4 (2011-07-12)
Fixed signature of some class methods [lgraf]
1.0a3
1.0a2
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.