Dolmen Zope3 Grok 存储注释
项目描述
dolmen.storage 定义了一个清晰的、高级的API,用于处理可插拔的存储组件。
组件
存储
存储是一个专门用于存储内容的组件。它像一个容器,并提供 dolmen.storage.IStorage 接口。
开箱即用,有两个基于ZODB BTrees的IStorage组件可用
>>> from dolmen.storage import IStorage >>> from dolmen.storage import container >>> from zope.container.interfaces import IContainer >>> otree = container.OOBTreeStorage() >>> itree = container.IOBTreeStorage() >>> IStorage.extends(IContainer) True >>> from zope.interface import verify >>> verify.verifyObject(IStorage, otree) True >>> verify.verifyObject(IStorage, itree) True
委托存储
委托存储是一个像存储一样行为的组件,但将所有容器级方法委托给一个 storage 属性
>>> from dolmen.storage import IDelegatedStorage, DelegatedStorage >>> class MyStorage(DelegatedStorage): ... def __init__(self): ... self.storage = container.OOBTreeStorage() >>> container = MyStorage() >>> verify.verifyObject(IDelegatedStorage, container) True >>> container['manfred'] = 'mammoth' >>> 'manfred' in container True >>> 'manfred' in container.storage True
storage 属性必须是一个有效的 IStorage
>>> class FailingStorage(DelegatedStorage): ... def __init__(self): ... self.storage = list() >>> container = FailingStorage() Traceback (most recent call last): ... SchemaNotProvided
注释
这些存储组件用于提供一个非常灵活的注释存储功能。
注释存储
注释存储提供了一种将存储委托到注释容器的方法
>>> import grokcore.component as grok
>>> from dolmen.storage import AnnotationStorage
>>> from zope.annotation.interfaces import IAnnotations
>>> from zope.annotation.interfaces import IAttributeAnnotatable
>>> class Mammoth(object):
... '''A furry creature
... '''
... grok.implements(IAttributeAnnotatable)
>>> class NamedStorage(AnnotationStorage):
... grok.name('some.name')
>>> manfred = Mammoth()
>>> named_storage = NamedStorage(manfred)
>>> IDelegatedStorage.providedBy(named_storage)
True
>>> named_storage['test'] = 'This is a simple test'
>>> list(named_storage.values())
['This is a simple test']
>>> annotations = IAnnotations(manfred).get("some.name")
>>> annotations == named_storage.storage
True
>>> annotations['test']
'This is a simple test'
注释属性
注释属性允许通过类似FieldProperty的属性直接访问注释存储或值
>>> from zope.schema import TextLine
>>> from zope.interface import Interface
>>> from dolmen.storage import AnnotationProperty
>>> class WildMammoth(object):
... '''A furry creature
... '''
... grok.implements(IAttributeAnnotatable)
>>> class IRidingMount(Interface):
... rider = TextLine(title=u'Name of the rider', default=None)
>>> class MammothRiding(grok.Adapter):
... rider = AnnotationProperty(IRidingMount['rider'])
>>> wooly = WildMammoth()
>>> annotator = MammothRiding(wooly)
>>> annotator.rider = u'Grok'
>>> IAnnotations(wooly).get("rider")
u'Grok'
更新日志
0.4 (2010-12-23)
现在,委托的 AnnotationStorage 使用了 zope.location.LocationProxy 以避免直接在存储对象上写入位置信息。这消除了所有相关的读写冲突。
0.3 (2010-02-21)
已清理所有依赖项。现在,dolmen.storage 已经完全摆脱了 zope.app 的依赖。
0.2 (2009-12-26)
ZTK 兼容性导入变更。
0.1 (2009-10-19)
首次发布
项目详情
关闭
dolmen.storage-0.4.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 41e9c23c4ca73a9ed43dfb0ed1a40e78ed458850576afd2d6bbf4f6134bea775 |
|
| MD5 | 153b60946be0e3a5fde663e4229cece4 |
|
| BLAKE2b-256 | 34e75d38afe3bc5884d2ceda2860a8e0995ef2490e43d8b33900aac84c16113d |