Dolmen Zope3 Grok存储注释

dolmen.storage的Python项目详细描述


dolmen.storage定义了一个清晰的高级api来处理可插入的 存储组件。

部件

储存

存储器是专用于存储内容的组件。它的行为就像 一个容器,提供接口dolmen.storage.istage。

基于zodb,两个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

委托存储

委派存储是一个组件,其行为类似于存储,但是 将所有容器级方法委派给存储区 属性:

>>> 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

存储属性必须是有效的历史记录:

>>> 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'

注释属性

注意!

此功能在包的测试中有详细说明。请读 测试以获取有关注释属性的更多信息。

Annotation属性允许直接访问批注 通过字段属性(如属性:

>>> 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是100%zope.app 免费的。

0.2(2009-12-26)

  • ZTK兼容性导入更改。

0.1(2009-10-19)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
多线程java线程。join未按预期工作   RegExp-GWT/Javascript的java测试方法   java Selenium RemoteWebDriver似乎无法识别对web元素的javascript更改   java当我从Excel工作表中读取inf时,无法按顺序打印文档文件中的信息   JAVAlang.OutOfMemoryError:尝试连接DB2时的Java堆空间   java无法使用smartband 2从google fit API获取心率数据   java外部化属性文件Widlfly&struts1。十、   java如何监视注入的单例?   如何使java日志输出显示在一行上?   java Jboss ws-wsdl问题   java toUpperCase(char)方法?   安卓 Gradle“应用程序”项目刷新失败原因:Java。Lang.NullPointerException   java Spring安全ACL错误无法找到对象标识的ACL信息   是否有一个REST Web服务API提供程序,如FRAPI(PHP),但用于Java?   java递归方法生成字符串的所有分区   JAVAlang.StringIndexOutOfBoundsException:字符串索引超出范围:9   java将项从集合<CustomObject>中获取到其属性列表中的最佳方法是什么   Java本机启动器性能   多捕获与多捕获的java性能差异   java如何创建BaseDAO+JDBC并像@Autowired变量一样使用它?