跳转到主要内容

Dolmen内容类型框架

项目描述

该包 dolmen.content 是定义内容类型的一种便捷方式。

关于

内容类型通常在架构中定义了几个属性和一个名称。此外,它们通常需要安全性来控制创建或修改(更新、删除等)。这正是 dolmen.content 所提供的,它提供了一套易于使用的 grok 指令。

示例

dolmen.content 内容声明为一个简单的类。一些指令可用于定义您的内容: nameschemafactory。有关这些指令的详细信息,请参阅包测试。

定义内容

让我们通过一个简单且非详尽的测试来展示包的功能。

>>> import dolmen.content
>>> from zope import schema
>>> from zope.interface import Interface

>>> class IContentSchema(Interface):
...    text = schema.Text(title=u"A body text", default=u"N/A")

>>> class MyContent(dolmen.content.Content):
...  """A very simple content
...  """
...  dolmen.content.schema(IContentSchema)
...  dolmen.content.name("a simple content type")

架构

内容现在可以被实例化。正如我们所见,即使没有完全理解,对象仍然有效地提供了模式。

>>> MyContent.text
<zope.schema.fieldproperty.FieldProperty object at ...>

>>> IContentSchema.implementedBy(MyContent)
True

>>> obj = MyContent()
>>> obj.text
u'N/A'

内容也可以通过提供初始值进行实例化。

>>> obj = MyContent(text=u"This is a nice text !")
>>> obj.text
u'This is a nice text !'

尽管已经应用了模式并且内容类型已经引导,但内容类型尚未完整。

>>> obj.__content_type__
Traceback (most recent call last):
...
AttributeError: 'MyContent' object has no attribute '__content_type__'

要获取 dolmen.content 内容的所有功能,我们需要注册我们的组件:我们需要理解它。

Grokking

我们注册了我们的组件

>>> from grokcore.component import testing
>>> testing.grok_component('mycontent', MyContent)
True

现在有额外的信息可用

>>> obj.__content_type__
u'a simple content type'

解析过程还允许自动注册一个非常方便的工厂作为实用工具。

工厂

当内容被解析时,注册了一个工厂,使用完整的模块和类点名称。这使得我们可以轻松地查询和实例化内容。

>>> from zope.component import getUtility
>>> factory = getUtility(dolmen.content.IFactory,
...                      name="dolmen.content.MyContent")
>>> factory
<dolmen.content.factoring.Factory object at ...>

当被调用时,工厂将为您创建内容类型。

>>> obj = factory()
>>> obj
<dolmen.content.MyContent object at ...>
>>> obj.text
u'N/A'

>>> obj = factory(text=u"This is as easy as it seems.")
>>> obj
<dolmen.content.MyContent object at ...>
>>> obj.text
u'This is as easy as it seems.'

安全性

创建的内容类型有一个基本的安全声明。我们可以使用 require 指令检索保护内容类型的权限值。

>>> dolmen.content.require.bind().get(obj)
'zope.ManageContent'

请注意,此安全声明在 dolmen.content 的任何地方都没有使用。它是提供在内容类型级别声明权限的方便方式。工厂不会检查此权限。如果您需要在工厂级别使用权限检查器,请提供您自己的工厂:请参阅测试模块中的示例。

更新日志

0.7.1 (2011-02-16)

  • 添加了检索组件模式的实用函数。这处理了 Martian 对基类的处理。 get_schema 应返回 schema 指令的默认值,即使调用的是没有定义 schema 的基类。

0.7 (2011-02-11)

这个版本是一个重大突破,并且与之前的版本不兼容。

  • BaseContent 不再存在。它已与 Content 合并。

  • IBaseContent 接口已消失。

  • 不再默认定义任何模式。

  • dolmen.content 内容不再提供 dublincore title 属性,并且默认情况下不再“属性可注解”。

0.6.2 (2011-02-10)

  • 修复了继承错误:如果模式中定义了,父类的属性被覆盖。这通过在类顾问中延迟处理模式以及使用“hasattr”而不是检查类 __dict__ 来解决。

0.6.1 (2011-02-02)

  • 清理了 ZCML 声明,以确保它包含所有需要的依赖项。

0.6 (2010-11-06)

  • 清理了依赖项。 zope.formlib 现在不再使用。

  • 代码已更新,以与最新的 martiangrokcore.component 一起使用。

  • __content_type__ 属性现在是一个 Unicode 字符串。这将尝试将给定的名称转换为 Unicode 或失败。

0.5.1 (2010-07-13)

  • IBaseContent 接口的 Title 标签添加了 zope 领域翻译。

0.5 (2010-07-13)

  • 默认工厂现在提供了一个有效的 IFactory 实现。添加了测试来修复此问题。

  • 更改了 __content_type__ 属性计算策略。添加了测试以防止任何更改和回归。

  • 添加了一个实用函数来获取对象或类的内容类型。

  • IFactory 接口现在允许空的 titledescription,这与通用工厂和指令的基值一致。

0.4 (2010-07-13)

  • 除了标题外,工厂现在还提供名称和描述。这些属性默认情况下获取生成的类指令的值。

  • 更新了测试并提高了覆盖率。

  • 工厂的 name 属性不再返回一个烹饪过的 i18n 值,而是生成类的 name 指令的值。现在表单必须自己处理标题。

0.3.1 (2010-02-22)

  • 修复了一个在模型实例化中的非常重要的错误。简单的实例化由于导入具有与模块类相同的名称而引起无限循环。这已得到修复,并添加了测试以测试此简单情况并避免回归。

0.3 (2010-02-08)

  • 使用新的 grokcore.content 包,允许取消对 grok 依赖。

  • 《BaseContent》现在在 zope.ManageContent 中设置默认的 require 值。这个权限 _不会_ 使用,它只是一个方便的指令,用于实现自己的安全检查。

  • 已经减少了依赖性。《zope.app》包不再使用。测试模块已经被重写,以便于更清晰和简洁的阅读。

  • 已删除 icon 指令。该功能将在独立的包中实现。请注意,这可能会破坏您现有的代码!

  • schema 指令现在可以在不使用 grokking 的情况下工作,使用 zope.interface 类顾问。这允许在非 grokked 代码中实现灵活的启动。

0.2.2 (2009-09-25)

  • 使用带错误修复的最后一个 dolmen.field 版本。

0.2.1 (2009-09-20)

  • 添加了测试并清理了测试模块。

0.2 (2009-09-04)

  • 添加了一个有序容器基类。

0.1 (2009-09-01)

  • 初始发布

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

dolmen.content-0.7.1.tar.gz (18.3 kB 查看散列值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面