创建对象时自动继承父文件夹的类别。

slc.autocategorize的Python项目详细描述


SLC/autocategorize/readme.txt中的完整自述文件和文档测试

简介

autocategor_ze允许您让在文件夹中创建的对象 自动接收与文件夹本身相同的类别元数据。

包含的对象在其 被创造出来。但是,当您更改 类别在文件夹中,包含的对象将不会重新分类。

工作原理:

此产品在所有基本文件夹上添加布尔字段“autocategorizecontent” 基于文件夹。当某个文件夹的此字段设置为true时,所有 在该文件夹中创建的对象将接收该文件夹的类别( “主题”字段的值)以及在 反对。

添加“autocategorizenewcontent”和“recursiveautocategorization”字段 通过架构扩展器适配器发送到基本文件夹架构。你可以覆盖这个 在您自己的产品中的适配器适用于另一个原型类,如果 必要*。

请参阅slc.autocategorize.configure.py

如何使用(简单的doctests):

首先,我们创建一个文件夹,我们希望对其子项进行分类 自动:

>>> self.folder.invokeFactory('Folder', 'documents')
'documents'
>>> folder = self.folder._getOb('documents')

要启用自动分类功能,必须设置“autocategorizecontent” 父文件夹上的字段。

这是通过模式扩展添加的字段,因此我们不能使用原型 产生变异。

>>> folder.Schema().get('autoCategorizeNewContent').set(folder, True)

让我们对文件夹进行分类:

>>> folder.setSubject(['foo', 'bar', 'baz'])

我们现在在这个文件夹中创建一个文档并测试它是否 被赋予相同的“主题”值:

>>> folder.invokeFactory('Document', 'document1')
'document1'
>>> d1 = folder.get('document1')

通常,当您在plone中创建一个原型对象时, 对象化事件被调用。autocategorize使用此事件来了解 创建新对象时。

这里我们必须手动操作:

>>> from zope import event
>>> from Products.Archetypes.event import ObjectInitializedEvent
>>> event.notify(ObjectInitializedEvent(d1))

现在我们测试文件夹的类别是否已添加:

>>> d1.Subject()
('foo', 'bar', 'baz')
我们还要确保文档中现有的类别没有被删除。 当它从其父文件夹接收到新文件夹时。我们还想确定 当子对象已经有父对象的一个类别时, 在自动分类过程中不会重复:

首先,我们创建新对象:

>>> folder.invokeFactory('Document', 'document2')
'document2'

然后我们设置类别:

>>> d2 = folder.get('document2')
>>> d2.setSubject(['baz', 'buz'])

然后我们调用事件通知slc.autocategorized对象已创建 (在plone中,这是自动发生的):

>>> from Products.Archetypes.event import ObjectInitializedEvent
>>> event.notify(ObjectInitializedEvent(d2))

让我们测试一下类别是否与预期一致:

>>> d2.Subject()
('baz', 'buz', 'foo', 'bar')

最后,我们测试“递归自动分类”功能是否有效。 首先,我们创建一个子文件夹,然后在该文件夹中创建另一个文档:

>>> folder.invokeFactory('Folder', 'sub-folder')
'sub-folder'
>>> subfolder = folder.get('sub-folder')
>>> subfolder.invokeFactory('Folder', 'document3')
'document3'

我们必须再次调用相应的事件:

>>> d3 = subfolder.get('document3')
>>> event.notify(ObjectInitializedEvent(d3))

现在我们确保now类别已经设置好了,因为递归 功能尚未激活:

>>> d3.Subject()
()

好的,现在让我们激活递归:

>>> folder.Schema().get('recursiveAutoCategorization').set(folder, True)

然后我们创建一个新文档:

>>> subfolder.invokeFactory('Folder', 'document4')
'document4'
>>> d4 = subfolder.get('document4')
>>> event.notify(ObjectInitializedEvent(d4))

并测试类别设置是否正确:

>>> d4.Subject()
('foo', 'bar', 'baz')

更改日志

0.2(2012-03-21)

  • 搞错了。当灵巧的物体是父母之一时,不要折断。[JCbrand]

0.1(2011-09-13)

  • 测试PLONE 4.1

0.1b1(2010-03-04)

  • 初始版本

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

推荐PyPI第三方库


热门话题
Java的Arraylist上的操作运行时是什么?   java按下按钮并显示通知   java如何修复“javax.net.ssl.SSLHandshakeException:20190416之后颁发并由不受信任的旧Symantec根CA锚定的TLS服务器证书”   用于新语言插件SonarQube的java解析器   java ANTLR4:参考书示例静态类定义   java如何计算用户点击按钮的次数以及如何保存按钮。安卓工作室   JSP if()语句中的java HTML不起作用   java仿真器崩溃“无效int”   雪花与Java应用程序的集成   从一家银行一行一行地拿到。带有自定义行尾的java txt文档   java从该方法的参数中获取值并显示   我的Eclipse插件尚未找到JAXBAPI的java实现   类如何从顶部文件夹加载java字节码(如果存在“.”)在子文件夹中?   ibm集成总线ibm MessageBroker Java API:Java。lang.NoClassDefFoundError:com。国际商用机器公司mq。MQException