Core
Workflows
Tier 3 processors use primitives and containers to handle file, API, and workflow boundaries.
Tier 3 processors use primitives and containers to handle file, API, and workflow boundaries.
DataFile
from extended_data import DataFile, read_data_file
artifact = DataFile.decode('{"service": {"name": "api"}}', suffix="json")
print(artifact.data["service"]["name"].upper_first())
print(artifact.metadata["encoding"])
loaded = read_data_file("config/service.yaml")
print(loaded["service"]["name"].upper_first())DataFile keeps source labels and metadata promoted and redacted before they enter workflow step names or result metadata.
Remote reads accept HTTPS URLs only; clear-text and unsupported URL schemes are
rejected before a request is created.
DataWorkflow
from extended_data import DataWorkflow
result = (
DataWorkflow.from_file("config/base.yaml")
.merge_file("config/dev.yaml", name="merge-dev")
.transform("reconstruct", "unhump")
.write("build/config.yaml")
)
print(result.steps)
print(result.as_extended())
print(result.as_builtin())Data Sync
from extended_data import DataWorkflow, sync_value_to_file
direct = sync_value_to_file({"service": "api"}, "build/config.json", encoding="json")
workflow = DataWorkflow.from_value({"service": "api"}).sync_file("build/config.yaml")
print(direct.changed)
print(workflow.to_dict()["destination"])Sync primitives compare rendered output before writing. That gives higher layers, such as vendor-fabric, a base local file sync operation without reimplementing export, redaction, and metadata handling.
The CLI exposes the same data boundary:
extended-data decode '{"service": {"name": "api"}}' --suffix json
extended-data inspect --file config.yaml
extended-data merge config/base.yaml config/dev.yaml --output yaml
extended-data transform --file payload.json --step reconstruct --step unhump