基于BTree的文件夹实现,支持排序
项目描述
plone.folder
概述
此包为基于B树(即Plone中的“大型文件夹”)的内容类型提供基类,这为存储提供了显著的性能优势。但是,“大型文件夹”默认不支持内容的显式排序。换句话说,您无法手动指定文件夹内项目的顺序,而只能从文件夹获取项目后根据给定标准排序。
然而,很多时候,人们希望能够显式排序文件夹的内容,例如对于与网站导航相关的项目。按字母顺序排序在这里通常没有意义。
为了弥补这一点,plone.folder通过上述基类为B树文件夹提供排序支持,该基类可以使用适配器存储实际的顺序信息。它还包含两个示例适配器实现
一个默认适配器,用于处理文件夹中包含的所有对象的顺序信息。此适配器可用于构建与文件夹内容完全兼容的后向兼容替换方案。换句话说,使用此适配器后,基于B树的文件夹应表现得就像“常规”文件夹实现一样,同时提供一些性能优势。
一个针对仅对一小部分内容(显式)顺序敏感的网站的目标适配器实现。它将只管理某些内容类型(通过标记接口)的顺序信息。
后者允许不必将此类内容与“不可排序”的内容分开。到目前为止,许多大型网站将“可排序”项(例如与导航相关的所有内容,通常只有少数几个)存储在常规文件夹中,而将大部分内容存储在“大型”文件夹中,通常仅出于性能原因。此适配器有望帮助避免在将来进行这种区分,同时仍提供B树文件夹更好的性能特征。
源代码
贡献者请阅读文档 Plone核心开发流程
源代码在 GitHub上的Plone代码仓库 中。
变更日志
4.0.1 (2024-01-22)
错误修复
修复部分排序测试。[maurits] (#23)
内部
更新配置文件。[plone devs] (55bda5c9, 6e36bcc4)
4.0.0 (2023-04-19)
破坏性更改
停止支持python 2.7。[gforcada] (#1)
内部
更新配置文件。[plone devs] (5cc689e5)
3.1.0 (2021-06-14)
新功能
恢复Webdav支持。[frapell] (#16)
3.0.3 (2020-06-24)
错误修复
对moveObjectsByDelta中经常调用的循环进行微优化。x in y 如果y是集合而不是列表,则速度可提高1000倍。[jensens] (#15)
3.0.2 (2020-04-20)
错误修复
小型的打包更新。[#1]
3.0.1 (2019-10-12)
错误修复
修复GopipIndex中documentToKeyMap的查找速度慢的问题。在某些情况下,速度提升可达66倍。这可能在大型导航树渲染时减少几秒钟。[jensens] (#14)
3.0.0 (2018-10-31)
破坏性更改
将GopipIndex从plone.app.folder移动到plone.folder。[jmevissen, petschki]
错误修复
修复删除未在排序注释中引用的对象时出现的KeyError。[vangheem]
2.0.1 (2018-09-23)
错误修复
稳定无序项的局部排序顺序。[davisagli]
修复Python 3中文件夹内容的排序。[pbauer]
修复Python 3中的测试。[pbauer]
2.0.0 (2018-06-20)
破坏性更改
停止支持Python 2.6/ Plone 4.3。[jensens]
错误修复
提高Python 2 / 3的兼容性。[pbauer, ale-rt]
修复过时的LazyMap导入。[jensens]
1.0.11 (2018-04-08)
新功能
在有序索引不一致的情况下改进日志记录。[tomgross]
错误修复
删除古老的buildout配置。[tomgross]
替换过时的测试断言调用。[tomgross]
1.0.10 (2018-01-30)
错误修复
增加Python 2 / 3的兼容性。[vincero]
1.0.9 (2016-08-08)
错误修复
使用zope.interface装饰器。[gforcada]
1.0.8 (2016-04-26)
修复
更新测试层以使用最佳实践,并移除ZopeTestCase依赖,这应该可以解决其测试隔离问题。[gforcada]
1.0.7 (2015-07-29)
依赖于Products.CMFCore并移除fake-cmf,因为这样做比减少复杂性更有帮助。[jensens]
清理:遵循PEP8规范,并不要将内置的id用作标识符。[jensens]
1.0.6 (2015-05-11)
空格清理,git忽略,清理包信息。[gforcada, rnixx, maurits]
1.0.5 (2013-12-07)
允许反转当前顺序,无需指定排序键。[maurits]
允许通过方法而不是属性进行排序。[maurits]
1.0.4 (2012-08-30)
更新manifest.in以修复打包错误。[esteele]
1.0.3 (2012-08-29)
在setup.py中更明确地命名更多依赖项。[thet]
1.0.2 (2012-07-02)
更新notifyContainerModified导入位置。[hannosch]
添加MANIFEST.in。[WouterVH]
1.0.1 - 2010-08-08
向有序文件夹实现添加了objectValues和objectItems方法,这些方法使用objectIds,从而使用排序信息。在Zope 2.13中,BTreeFolder2通过优化遍历内部_tree数据结构,避免了objectIds的中介。[hannosch]
1.0 - 2010-07-18
在DefaultOrdering适配器中避免危险的记忆化。[hannosch]
将许可证更新为仅支持GPL版本2。[hannosch]
1.0b5 - 2010-03-06
由于在Zope 2.x中使用时会导致严重的性能问题,因此不再支持为提供IContained的内容设置__parent__和__name__。[witsch]
1.0b4 - 2010-02-17
现在默认注册所有排序适配器,因为它们可以共存。[witsch]
向默认排序适配器添加__getitem__支持,以帮助在plone.app.folder中实现上一项/下一项支持。[witsch]
1.0b3 - 2010-02-09
确保在使用局部排序适配器时持久化排序更改。[hannosch, witsch]
1.0b2 - 2010-01-28
将对Products.CMFCore的依赖性变为软依赖。[witsch]
添加了一个“无序”适配器,当不需要显式排序时可以使用它。[davisagli]
允许使用不同命名的适配器来IOrdering,其名称由文件夹的_ordering属性确定。[davisagli]
1.0b1 - 2009-10-10
通过正确返回所需的NullResource来修复WebDAV内容创建过程。[optilude]
1.0a3 - 2009-05-11
让objectIds始终返回所有对象ID,即使在局部排序的情况下也是如此。[witsch]
1.0a2 - 2009-05-07
修复默认排序中的错误,该错误会导致删除项目时pos字典失去同步。[optilude]
声明对IContainer的支持。[optilude]
在_setOb()中正确设置__parent__和__name__,以便为IContained设置。
添加__getitem__,在未使用CMF混合时需要。[optilude]
添加了 __setitem__、__contains__ 和 __delitem__ 以支持类似于字典的 API。[optilude]
修复了移除非可排序内容以支持部分排序的问题。[witsch]
修复了 getObjectPosition,使其对于非可排序内容返回表示“无位置”的值,而不是抛出错误。[witsch]
修复了基于 btree 的文件夹基类的布尔值。[witsch]
将 CMF 从基于 btree 的文件夹类中提取出来,之后简化了一些事情。[witsch]
添加了仅针对“可排序”内容提供显式排序的适配器。[witsch]
清理了测试及其设置。[witsch]
1.0a1 - 2008-05-27
初始发布 [optilude, tesdal, witsch]
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪个,请了解有关 安装包 的更多信息。