Skip to content

Session paths

session_paths

resolve_session_paths(payload, defaults, contract)

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
        ]