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 |