跳转到主要内容

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 (10.2 kB 查看哈希值)

上传时间 源代码

由以下支持