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

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:不解析XML的简单XML。例外   KIE Workbench的java自定义UI   java将元素从bucket移动到LinkedList,但有一个元素被完全删除   如何将java stream collect转换为scala   java运行AsynkTask多次不工作   java组织。xml。萨克斯。SAXParseException:cvccomplextype。2.4.c:匹配的通配符是严格的   java是一种计算排序算法所需时间的合适方法   java在O(logn)时间内对排序整数数组中具有相同数字的数字进行计数   xpages从当前数据库javaAgent调用另一个数据库的javaAgent   java如何在instagram中上传特定位置的所有照片   JavaApachePOI可以有效地删除多个列   java创建的对象数   java我可以在关闭连接时关闭Oracle JDBC自动提交吗?