Path¶
All paths are stored internally using the nob.Path class. Paths are full
(w.r.t. their Nob or NobView), and are in essence a list of the keys
constituting the nested address. They can however be viewed equivalently as
a unix-type path string with / separators. Here are some examples
p1 = Path(['key1'])
p1 >>> Path(/key1)
p2 = Path('/key1/key2')
p2 >>> Path(/key1/key2)
p1 / 'key3' >>> Path(/key1/key3)
p2.parent >>> Path(/key1)
p2.parent == p1 >>> True
'key2' in p2 >>> True
[k for k in p2] >>> ['key1', 'key2']
p2[-1] >>> 'key2'
len(p2) >>> 2
These can be helpful to manipulate paths yourself, as any full access with a
string to a Nob or NobView object also accepts a Path object.
So say you are accessing the keys in list_of_keys at one position, but
that thet also exist elsewhere in the tree. You could use e.g.:
root = Path('/path/to/root/of/keys')
[n[root / key] for key in list_of_keys]
Warning
You might have noticed that Path behaves similarly to the
pathlib.PosixPath object, and that’s by design. However, it is not
the same. Don’t feed Nob objects pathlib.PosixPath objects,
that won’t go well.