Workflows¶
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.
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