跳转到主要内容

路径的Zope目录索引

项目描述

简介

这是一个Zope目录索引,用于通过路径查询ZODB中的树状结构。它支持深度限制,并且具有构建可用于导航树和网站图的结构的 ability。实际的导航树实现不(也不应该)在这个包中。这仅是索引实现。

假设

EPI关于目录和索引与所有内容位于同一容器中做出了假设。这在Plone设置中非常有意义,但在其他场景中可能不会按预期工作。

/plonesite/folder, level=0这样的查询在内部被转换为/folder, level=1。这避免了触摸包含指向您网站中所有内容引用的相当大的plonesite集合。

功能

  • 可以使用单个目录查询构建网站图

  • 可以使用单个目录查询构建导航树

配置

在GenericSetup配置文件中,提供以下片段以创建索引

<index
    meta_type="ExtendedPathIndex"
    name="my_path">
  <extra
      name="indexed_attrs"
      value="my_path"
  />
</index>

对于多值路径,提供一个额外的(关闭不必要的优化)

<index
    meta_type="ExtendedPathIndex"
    name="my_path">
  <extra
      name="indexed_attrs"
      value="my_path"
  />
  <extra
      name="multi_valued"
      value="True"
  />
</index>

具有每个路径元素多个值的索引示例:想象一下索引多语言内容。每个项目都被翻译,并且所有翻译的项目共享一个共同的唯一标识符(这就是plone.app.multilingual的工作方式)。现在创建一个返回此唯一标识符而不是项目ID作为路径元素的索引器。通过这种方式,可以一次查询文件夹中所有语言的所有元素(有关此模式的更高级用法,请参阅plone.app.multilingualindexes)。

用法

catalog(path='some/path')

在some/path下搜索所有对象(递归,相当于深度=-1)

catalog(path=dict(query='some/path', depth=0))

搜索给定路径的对象。对于多值路径,返回多个对象。

catalog(path=dict(query='some/path', depth=2))

搜索some/path下的所有对象,但只到深度2

catalog(path=dict(query='some/path', navtree=True))

搜索some/path下的所有对象以用于渲染导航树。这包括some/path下的所有对象,以及所有父对象,直到深度1。

catalog(path=dict(query='some/path', navtree=True, depth=0))

搜索some/path下的所有对象以用于渲染面包屑导航。这仅包括父对象本身。

catalog(path=dict(query='some/path', navtree=True, navtree_start=1))

搜索some/path下的所有对象以用于渲染部分导航树。这包括路径下的所有对象,但停止在根级别之上1级。给定的路径被包含在内,即使它在门户中的路径比级别参数允许的更短。

catalog(path=dict(query='some/path', navtree=True, depth=0, navtree_start=1))

在某个路径下搜索所有对象以渲染部分面包屑路径。这包括路径下的所有父级,但停止在根目录之上的一级。即使给定路径在门户中的级别低于起始参数允许的级别,也会将其包含在内。

catalog(path=dict(query='some/path', level=2))

搜索所有路径包含some/path且位于第2级的对象。这包括路径如/foo/bar/some/path和/spam/eggs/some/path,以及这些路径的所有子路径。

catalog(path=dict(query='some/path', level=-1, depth=0))

搜索所有路径包含some/path且位于任何级别的对象。这包括路径如/spam/some/path以及/foo/bar/baz/some/path,但由于深度设置为0,只有那些精确匹配的结果被包含在内。

catalog(path=dict(query=(('foo/bar', 2), ('bar/baz'), 1), depth=0))

搜索多个路径,每个路径位于不同的级别(foo/bar在第2级,bar/baz在第1级),并且只返回精确匹配的结果。

致谢

  • 初始PathIndex代码由Zope Corporation提供

  • 来自Jarn的Helge Tesdal和Martijn Pieters实现了ExtendedPathIndex

  • Alec Mitchell对navtree和列表优化做出了贡献

许可证

本软件基于GPLv2许可证发布。

变更日志

4.0.1 (2020-09-28)

错误修复

  • 取消zc.buildout的锁定

  • 将版本锁定到Zope 4(否则无法再构建Python 2.7版本)

  • 更新tox.ini以与设置分类器保持一致

  • Products.ZCatalog添加到setup.py的install_requires中,因为它不再是Zope核心的一部分(#17)

4.0.0 (2020-05-06)

重大变更

  • 删除ZCatalog < 4的兼容性[jenens] (#15)

错误修复

  • 修复EPI的IRO。[jenens] (#15)

3.4.2 (2019-05-01)

错误修复

  • 避免弃用警告。[gforcada] (#10)

3.4.1 (2018-12-14)

错误修复

  • 重新发布不进行更改以正确更新变更日志。(#7)

3.4.0 (2018-12-14)

新功能

  • 支持“虚拟”路径的多值结果。[jenens] (#7)

3.3.1 (2018-09-23)

错误修复

  • 修复setup.py中定义的依赖项。[gforcada]

3.3.0 (2018-01-17)

新功能

  • 添加对Python 3的兼容性。

3.2.0 (2017-08-27)

新功能

  • 添加对ZCatalog 4的IQueryIndex接口的前向兼容性。

3.1.1 (2016-07-29)

错误修复

  • 使用zope.interface装饰器。[gforcada]

3.1 (2013-01-01)

  • 行为不一致,因为只要输入路径长度短于或等于最长索引路径,就没有要求整个路径已索引。 [bosim]

3.0.1 - 2012-06-30

  • 修复了当路径索引不是查询计划中的第一个索引时的深度限制搜索。[hannosch]。感谢Peter Mathis报告问题。

3.0 - 2012-04-26

  • 修复了当父路径不在index_parents中时插入TypeError。[maurits]

  • _index_parents中提供更好的保护以防止损坏内部数据。[hannosch]

  • 通过从索引传递信息到unindex方法并避免另一个unindex扫描来稍微优化对象重新索引。[hannosch]

  • 避免在index_object中确定长度更改时进行额外的unindex扫描。[hannosch]

  • 声明支持新的ILimitedResultIndex接口,并要求至少Zope 2.13.0a3。[hannosch]

  • 合并来自experimental.catalogqueryplan的优化。[hannosch]

  • PEP8清理和在un/index代码中的微小优化。[hannosch]

  • 指定分发依赖项。[hannosch]

2.9 - 2010-07-18

  • 将许可证更新为仅GPL版本2。[hannosch]

2.8 - 2010-05-01

  • 不再直接依赖于PathIndex的测试内部。[hannosch]

2.7 - 2009-11-13

  • 将AccessControl导入测试中,以避免在Zope 2.12中出现的循环导入问题。[davisagli]

2.6 - 2009-05-18

  • 澄清许可证为仅GPL。[hannosch]

  • 声明包依赖项并修复使用Globals的弃用警告。[hannosch]

2.5 - 2008年12月19日

  • 清理测试:删除ZTC垃圾,将它们转换为正确的单元测试并删除测试其他非索引组件的测试。[mj]

  • 修复了传递(path, level)元组而不是使用通用level参数的查询中的级别处理。[mj]

  • 重构并记录了索引代码库。在过程中发现了几个错误并进行了修复。还添加了缺失的功能,所有搜索选项现在应该在所有场景下都能正常工作。[mj]

2.4.1 - 2008年9月28日

  • 修复了setup.py中的拼写错误,这破坏了egg的安装[ree]

2.4 - 2006年9月11日

  • 放宽了对路径的检查,目前只允许字符串。现在我们接受所有基本字符串。这解决了http://dev.plone.org/plone/ticket/5617。[hannosch]

  • 将日志基础设施转换为使用Python的logging模块而不是zLOG。[hannosch]

2.3 - 2005年12月18日

  • 当不正确的路径被编目时,添加了一些额外的调试信息。[sidnei]

2.2 - 2005年10月7日

  • 在父路径和所有对象的完整路径上添加了单独的索引结构。这显著提高了导航树、面包屑和列表的扩展性。[alecm]

  • 假设EPI与内容在同一容器中使用,并使用相对搜索而不是绝对搜索 - 实际上是将/plonesite搜索转换为/search,并将起始级别设置为1而不是0。[tesdal]

2.1 - 2005年5月20日

  • 为ExtendedPathIndex实现“indexed_attrs”支持。

  • 防止导航树查询在查询的路径实际上不在索引中,但其父级存在时提前停止。

1.0

  • 能够从编目数据生成导航树结构的路径索引。

项目详情


下载文件

下载适合您平台的应用程序文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

Products.ExtendedPathIndex-4.0.1.tar.gz (23.6 kB 查看哈希值)

上传时间

构建分发

Products.ExtendedPathIndex-4.0.1-py2.py3-none-any.whl (15.4 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面