>>> from Products.ExtendedPathIndex.ExtendedPathIndex import ExtendedPathIndex
>>>
>>> pi = ExtendedPathIndex("pi")
>>> paths = {}
>>>
>>> for leaf in ("1/1 1/12/121 1/12/122 2/21/1".split()):
... comps = leaf.split("/")
... pd = paths
... for c in comps:
... if c not in pd: pd[c] = {}
... pd = pd[c]
...
>>> def gen(prefix, pd):
... for c in sorted(pd):
... np = prefix + "/" + c
... yield np
... yield from gen(np, pd[c])
...
>>> class _O(object):
... def __init__(self, pi): self.pi = pi
...
>>> for i, p in enumerate(gen("", paths)):
... print(i, p)
... indexed = pi.index_object(i, _O(p))
...
0 /1
1 /1/1
2 /1/12
3 /1/12/121
4 /1/12/122
5 /2
6 /2/21
7 /2/21/1
>>> list(pi.search("1/12", default_level=0, depth=1))
[3, 4]
>>> list(pi.search("12", default_level=1, depth=1))
[2, 3, 4]
For level=0 only the children are included; for level>0 children and parent are included.
The docstring for search suggests that the second behaviour is correct - but I assume the the first behaviour is what is needed in many applications.
For
level=0
only the children are included; forlevel>0
children and parent are included. The docstring forsearch
suggests that the second behaviour is correct - but I assume the the first behaviour is what is needed in many applications.