Canonicalize the payload consumed by both authorization and execution.
Source code in packages/axm/src/axm/tools/session_paths.py
| Python |
|---|
| def resolve_session_paths(
payload: dict[str, object],
defaults: Mapping[str, object],
contract: WriteContract | None,
) -> None:
"""Canonicalize the payload consumed by both authorization and execution."""
root = Path(contract.execution_root).resolve() if contract is not None else None
for key, default in defaults.items():
payload.setdefault(key, default)
for key in tuple(
key
for key in payload
if key in _ROOT_KEYS or key.endswith(("_path", "_root", "_dir", "_paths"))
):
payload[key] = _children(payload[key], root, contract)
raw_base = payload.get("path")
base = Path(raw_base) if isinstance(raw_base, str) and root is not None else root
for key in {"file", "files"} & payload.keys():
payload[key] = _children(payload[key], base, contract)
operations = payload.get("operations")
if isinstance(operations, list):
payload["operations"] = [
{**op, "file": _children(op["file"], base, contract)}
if isinstance(op, dict) and "file" in op
else op
for op in operations
]
|