Extended Data is a Python package family for moving structured values across clear boundaries: parsing input, normalizing and transforming it, preserving ergonomic container behavior, and exporting a plain built-in value when it is time to write or hand data to another library.
Start with the documentation site, especially the Getting Started and Package Surface guides.
pip install extended-dataMost application code needs only these three choices:
- Use
extended_data.primitivesfor a single deterministic conversion, serialization operation, transform, or redaction step. - Use
ExtendedData(value)at an uncertain data boundary. It returns the right extended shape (ExtendedDict,ExtendedList,ExtendedString, and so on) while retaining normal Python collection behavior. - Use
DataFileorDataWorkflowwhen reading, merging, transforming, or writing a structured artifact is the actual unit of work.
from extended_data import DataWorkflow, ExtendedData
from extended_data.primitives import decode_json, encode_yaml
incoming = decode_json('{"service": {"name": "api"}}')
config = ExtendedData(incoming).merge({"replicas": 2})
result = (
DataWorkflow.from_value(config)
.transform("unhump")
.result()
)
assert result.as_extended()["service"]["name"] == "api"
assert "replicas: 2" in encode_yaml(result.as_builtin())ExtendedData promotes nested values as they enter or mutate containers. Use
as_builtin() (or to_builtin()) at an explicit export boundary when an API,
serializer, or third-party library needs ordinary Python dict, list,
str, and scalar values.
Automated and agentic consumers should use the same public contract as human
callers: import pure functions from extended_data.primitives, promote unknown
payloads with ExtendedData, and lower values only at explicit boundaries.
The agentic consumer guide
sets out the safe integration rules, test plugin, and package ownership limits.
| Distribution | Package path | Purpose |
|---|---|---|
extended-data |
packages/extended-data |
Runtime data primitives, containers, IO, workflows, inputs, logging, docs, and CLI |
pytest-extended-data |
packages/pytest-extended-data |
Reusable pytest fixtures and assertion helpers for Extended Data consumers |
The workspace root is not a published Python distribution. Install a package, not the repository root, in downstream applications.
uv sync --all-packages --all-extras --dev
tox -e lint,typecheck,audit,py311,py312,py313,py314,examples,docs,build
pnpm docs:validateThe Sourcey documentation source lives in docs/ and deploys to
https://extended-data.dev. It is independently locked from the Python uv
workspace so documentation builds remain deterministic.
