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.2.0.tar.gz (14.9 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.2.0-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: data_cascade-0.2.0.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.12 Linux/6.11.0-1018-azure

File hashes

Hashes for data_cascade-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e4a53aafa291ac4154930bc97acce106599da0d3ad4a2ae0e4e1bc2f2a212775
MD5 b25c3d18cf52609f74d99e8c00a90178
BLAKE2b-256 6f20901114e687d3157400f6f86a7a779c32f7b3b0635b9bd995cef0b16bee07

See more details on using hashes here.

File details

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

File metadata

  • Download URL: data_cascade-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 21.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.12 Linux/6.11.0-1018-azure

File hashes

Hashes for data_cascade-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f0671fe7b152d7c33dc3fd422581785618b772684adb74a62f0500c28b9a231c
MD5 0034e57d46a3bb1ffa31e69418c07735
BLAKE2b-256 310685bfe822e6b0753bc0b66e6737df7be1b0d64132fa25352966657efa8317

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