Skip to main content

Hierarchical path representation and manipulation for MoaT

Project description

Hierarchical Paths

% start main % start synopsis

MoaT Paths are immutable sequences that can be represented as dot-separated or slash-separated strings, with special encoding for various data types.

MoaT paths are typically entered and displayed with dots as separators and colon as "special" markers. For example, ext:1.set is a three-element path consisting of two strings with an integer in between.

There's a secondary representation that uses slashes (ext/:1/set) for interfacing with the file system or MQTT.

See pydoc moat.lib.path.Path for details.

The MoaT ecosystem uses Path objects as hierarchical accessors for objects and data.

% end synopsis

Usage

Creating paths

from moat.lib.path import Path, P

# Create paths from elements
path = Path()  # empty path

path = P("foo.bar.baz")  # dot notation
assert path == Path.build(("foo", "bar", "baz"))  # assemble from tuples, lists etc.

# Create from various types
path = Path.build(("config", 42, True))  # Mixed types
assert path == P("config:x2a:t")  # config, 0x2a (42), True

Path representation

Paths can be represented in two forms:

Dot notation: Elements separated by dots

path = P("foo.bar.baz")
str(path)  # "foo.bar.baz"

Slash notation: Elements separated by slashes

path = P("foo.bar.baz")
path.slash  # "foo/bar/baz"

Special codes

MoaT paths support non-string path elements. The most common are:

# Inline escapes (within an element):
#   ::  escapes : colon
#   :.  escapes . dot
#   :_  escapes   space
#   :|  escapes / slash

# Type prefixes (start a new element):
#   :t   True
#   :f   False
#   :e   empty string
#   :n   None
#   :42  Simple integer
#   :xAB Hex integer (0xAB)
#   :b01 Binary integer (0b01)
#   :yAB Bytestring, hex encoding
#   :sAB Bytestring, base64 encoding

path = P("config:x2a:t")  # Represents ("config", 42, True)

Path operations

from moat.lib.path import Path

path1 = P("foo.bar")
path2 = P("baz.qux")

# Concatenation
combined = path1 + path2  # Path("foo", "bar", "baz", "qux")

# Element access
path1[0]  # "foo"
path1[-1]  # "bar"

# Slicing
path = Path("a.b.c.d")
path[1:3]  # ("b", "c")

# Length
len(path)  # 4

# Iteration
for elem in path:
    print(elem)

# Appending single element
path = path / "new"  # a.b.c.d.new

% end main

Serialization

MoaT paths integrate with serialization formats:

  • YAML: Use a !P prefix for Path objects (dot notation)
  • CBOR: List marked with tag 39 ("Identifier")
  • Msgpack: extension 3 encapsulates path elements

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

moat_lib_path-0.3.3.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

moat_lib_path-0.3.3-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file moat_lib_path-0.3.3.tar.gz.

File metadata

  • Download URL: moat_lib_path-0.3.3.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for moat_lib_path-0.3.3.tar.gz
Algorithm Hash digest
SHA256 a2a32b0be457a12684204f487de2ff2b66cadf720b3f6b8d03328b600ca6e8d6
MD5 127fa627b7ddb46d5f180e69b600e24e
BLAKE2b-256 70418b64104d6c9caf49b624d60cdab68983dcb319961ee0f7594be9cc2b0727

See more details on using hashes here.

File details

Details for the file moat_lib_path-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: moat_lib_path-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for moat_lib_path-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6d3c99d2e307d11cdeffca6ff844d64f4c2fe556e1a897010ce709789b0edda9
MD5 148d495b7748cfa972a58cb82c27361d
BLAKE2b-256 a26de867febbd662af4a8a7c11972d96cb727e995780d90ef474866c3881b21b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page