Dolmen内容类型框架
项目描述
该包 dolmen.content 是定义内容类型的一种便捷方式。
关于
内容类型通常在架构中定义了几个属性和一个名称。此外,它们通常需要安全性来控制创建或修改(更新、删除等)。这正是 dolmen.content 所提供的,它提供了一套易于使用的 grok 指令。
示例
dolmen.content 内容声明为一个简单的类。一些指令可用于定义您的内容: name、schema 和 factory。有关这些指令的详细信息,请参阅包测试。
定义内容
让我们通过一个简单且非详尽的测试来展示包的功能。
>>> 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 现在不再使用。
代码已更新,以与最新的 martian 和 grokcore.component 一起使用。
__content_type__ 属性现在是一个 Unicode 字符串。这将尝试将给定的名称转换为 Unicode 或失败。
0.5.1 (2010-07-13)
为 IBaseContent 接口的 Title 标签添加了 zope 领域翻译。
0.5 (2010-07-13)
默认工厂现在提供了一个有效的 IFactory 实现。添加了测试来修复此问题。
更改了 __content_type__ 属性计算策略。添加了测试以防止任何更改和回归。
添加了一个实用函数来获取对象或类的内容类型。
IFactory 接口现在允许空的 title 和 description,这与通用工厂和指令的基值一致。
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 的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | a4433f836be45b7fc081ef6d1059c1c2904b806b6f422e57d6eb81ed49773fcf |
|
MD5 | daabebc5f0fa4ac1a7ef821111c44f13 |
|
BLAKE2b-256 | 6a71a0e4387489119d51be298ed21dae56f111a1025b5fa1f67d2c4042f3e5c2 |