基于BTree的Zope OFS实现。
项目描述
概述
BTreeFolder2是Zope产品,类似于Zope 2 OFS文件夹,但可以存储更多的项目。
当你用太多项目填充Zope文件夹时,Zope和你的浏览器都会不堪重负。Zope需要加载和存储一个大的文件夹对象,而浏览器需要重复渲染大的HTML表格。Zope可以存储很多对象,但它在单个标准文件夹中存储很多对象时会有困难。
Zope公司曾经就这个问题进行了广泛讨论。决定我们将扩展标准文件夹以优雅地处理大量对象。不幸的是,Zope文件夹现在被以多种方式使用和扩展,要修改标准文件夹以兼容所有Zope产品将非常困难。
因此诞生了BTreeFolder产品。它将所有子对象存储在ZODB BTree中,这是一种设计用来在不将所有项目加载到内存的情况下处理许多项目的结构。它还将文件夹的内容渲染为一个简单的选择列表而不是表格。大多数浏览器没有问题渲染大型选择列表。
但仍然有一个问题尚未解决。BTreeFolders仍然在一个数据库记录中存储所有子对象的ID。如果你在一个BTreeFolder中放入成千上万的项目,你仍然会加载和存储一个多兆字节的文件夹对象。Zope可以这样做,但速度不快,而且还会使数据库膨胀。
BTreeFolder2解决了这个问题。它不仅存储子对象,还存储子对象的ID在BTree中。它还在UI中批量列出项目,一次只显示1000个项目。所以如果你仔细编写你的应用程序,你可以使用BTreeFolder2存储物理存储可以容纳的尽可能多的项目。
但是,有一些产品依赖于原始BTreeFolder的内部结构。因此,为了避免破坏这些产品,产品已经被重命名。你可以同时安装这两个产品。如果你正在开发新的应用程序,你应该使用BTreeFolder2。
使用方法
BTreeFolder2用户界面显示项目列表而不是一系列复选框。要访问项目,请在列表中选择它并点击“编辑”按钮。
BTreeFolder2对象提供了Python字典样式的函数,使它们在Python代码中比标准文件夹更容易使用
has_key(key) keys() values() items() get(key, default=None) __len__()
keys()、values()和items()返回序列,但不一定是元组或列表。使用len(folder)来调用__len__()方法。values()和items()返回的对象具有acquisition包装器。
BTreeFolder2还提供了一个生成唯一、不重叠ID的方法
generateId(prefix='item', suffix='', rand_ceiling=999999999)
此方法返回的ID保证不会与文件夹中的任何其他ID冲突。将返回的值用作新对象的ID。生成的ID通常是顺序的,这样可能以某种方式相关的对象就一起加载。
BTreeFolder2实现了完整的文件夹接口,除了superValues()方法不返回任何项。要按照Zope代码库期望的方式实现该方法将损害使用BTreeFolder2获得性能优势。
更改日志
5.1 (2023-05-02)
依赖于Zope而不是Zope2。
在“删除所有对象”按钮上添加确认提示。(见#9)
5.0 (2023-02-01)
放弃对Python 2.7、3.5和3.6的支持。
4.4 (2022-12-16)
修复Python 2不兼容性。
修复针对Zope 4的测试中隐秘的buildout配置错误。
添加对Python 3.10和3.11的支持。
4.3 (2021-04-26)
4.2 (2019-03-08)
使用setup.py中的python_requires指定支持的Python版本(见Zope#481)
由于Zope自身不支持它,放弃对Python 3.4的支持。
添加对Python 3.8的支持
4.1 (2018-10-05)
提高PEP8兼容性。
为Bootstrap ZMI添加图标。
通过使用当前API避免弃用警告。
支持 Python 3.7。
4.0.0 (2017-05-23)
添加了 tox 配置
Python 3 兼容性
更新为需要与 Zope 4 兼容。
3.0 (2016-07-18)
更新依赖项(不含 ZODB,但包含 BTrees)
2.14.0 (2015-06-18)
需要 ExtensionClass >= 4.1a1(与 Zope 4 兼容)。
2.13.5 (2015-06-18)
添加了清理例程的用例,其中元类型索引包含不在树中的键。
2.13.4 (2011-12-12)
为 BTreeFolder2Base.hasObject 方法提供安全声明。
添加了一些测试以验证 getattr 的正确行为。
对 __getattr__ 和 _getOb 进行了细微优化。
2.13.3 (2011-03-15)
keys、values 和 items 方法现在与 objectIds、objectValues 和 objectItems 完全相同。它们之前已经做了同样的事情,但重复了代码。
2.13.2 (2011-03-08)
objectValues 和 objectItems 在不请求特殊 spec 时不再进行特殊处理,因为 objectIds 已经正确处理了。
2.13.1 (2010-08-04)
确保返回对象的方法返回 Acquisition 包装的对象。
在调用我们自己的 keys、values 和 items 方法时更加小心,因为子类可能覆盖了其中的一些。
2.13.0 (2010-07-11)
将 objectIds、objectItems 和 objectValues 方法更改为在未传递 spec 参数时直接使用内部 OOBTree 方法。
将 keys、items 和 values 方法的实现更改为直接访问 self._tree OOBTree 方法。这避免了在 meta_types 结构中进行查找。
实现完整的字典协议,包括 __getitem__、__delitem__、__setitem__、__nonzero__、__iter__ 和 __contains__。
作为独立的软件包发布。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。