Skip to main content

Composable directory-based data cascade loader/saver with per-file origins and a convenient path/proxy API.

Project description

data-cascade

A composable directory-based data cascade loader/saver for Python (>=3.10). It merges files in a tree (YAML/JSON/TOML), keeps a per-key origin map for round-tripping, and offers both a path API and an ergonomic proxy API with dirty-file saves.

Features

  • Merge __main__.* into the current node and per-file trees by stem name.
  • Directory-level __config__.* with data.merge options (dict/list modes, per-key overrides, excludes).
  • Supports YAML (ruamel.yaml preferred, PyYAML fallback), JSON (stdlib), TOML (tomllib or tomli; writers via tomli-w or toml).
  • Returns a CascadeMap mapping each merged key path to the source file and local path.
  • save_data_cascade writes values back to their original files, or sensible defaults for new keys.
  • Cascade object with:
    • Path API: get("a.b[1]"), set("a.b[1]", value), delete("a.b[1]")
    • Proxy API: c.node("a").b[1].set(value) and c.node().a.b[1].get()
    • Dirty-file saves: c.save() only rewrites files you touched.

Install (with Poetry)

poetry add data-cascade
# Optionally enable YAML and TOML writers/readers
poetry add data-cascade -E yaml -E toml

Quick start

from pathlib import Path
from data_cascade import load_data_cascade, save_data_cascade

data, cmap = load_data_cascade(Path("data"))
data["project"] = {"name": "Alpha"}
save_data_cascade(Path("data"), data, cmap)

The Cascade object

from data_cascade import make_cascade

c = make_cascade("data")

# Path API
members = c.get('team.members')
c.set('team.members[1]', 'Carol')
c.save()  # only touches the file that owns team.members

# Proxy API
node = c.node('a').b[1]
node.set(42)
print(node.get())
c.save()

Configuring merge

Put a __config__.yaml in any directory. Example:

__config__:
  data:
    merge:
      dict: deep            # deep | override | first_wins
      list:
        mode: merge_by_key  # replace | extend | unique | merge_by_key
        key: id
      per_key:
        tasks:
          list:
            mode: unique
      exclude: ["scratch"]  # skip stems or keys

Handling missing libraries

YAML and TOML are optional. If a file is encountered and no handler exists for its extension, a warning is logged and the file is skipped/raises on save for that type. Install extras (-E yaml, -E toml) for full support.

Tasks (poethepoet)

poe test   # run pytest
poe pack   # packaging info
poe fmt    # placeholder for formatters

License

MIT

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

data_cascade-0.1.0.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

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

data_cascade-0.1.0-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file data_cascade-0.1.0.tar.gz.

File metadata

  • Download URL: data_cascade-0.1.0.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.11 Linux/6.6.87.2-microsoft-standard-WSL2

File hashes

Hashes for data_cascade-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b00ecd958b5c86c3b555e6e4b6e6ff5adccbab36ab8fc7b7779fc39f711ccbd8
MD5 1779750cb656be86c4321288dc09bf73
BLAKE2b-256 dac10e472def271b518d086104cf94bb88569e6939051d8bd26f5d3454d10f54

See more details on using hashes here.

File details

Details for the file data_cascade-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: data_cascade-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 20.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.11 Linux/6.6.87.2-microsoft-standard-WSL2

File hashes

Hashes for data_cascade-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fd24f067f1ed551fc86ad9aae37c39f704aca6d4f7b9fa43ab47c7648042dfd6
MD5 43235f7e50344446325fe187fe68d2f5
BLAKE2b-256 e1d263a6fd26dcb8c8c99d3f1fbbf2097ea5161dec6a90bffdeadabf02a83361

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