32 lines
848 B
Python
32 lines
848 B
Python
|
|
"""CLI: compute a view_hash or awareness_hash over a document.
|
||
|
|
|
||
|
|
python -m informed_decision <path.json> [view|awareness]
|
||
|
|
"""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import json
|
||
|
|
import pathlib
|
||
|
|
import sys
|
||
|
|
|
||
|
|
from .canonicalize import awareness_hash, view_hash
|
||
|
|
|
||
|
|
|
||
|
|
def main(argv: list[str]) -> int:
|
||
|
|
if not argv:
|
||
|
|
print(__doc__, file=sys.stderr)
|
||
|
|
return 2
|
||
|
|
data = json.loads(pathlib.Path(argv[0]).read_text(encoding="utf-8"))
|
||
|
|
kind = argv[1] if len(argv) > 1 else "view"
|
||
|
|
if kind not in ("view", "awareness"):
|
||
|
|
print(f"unknown kind {kind!r}; expected 'view' or 'awareness'", file=sys.stderr)
|
||
|
|
return 2
|
||
|
|
result = view_hash(data) if kind == "view" else awareness_hash(data)
|
||
|
|
print(result["canonical"])
|
||
|
|
print(result["hex"])
|
||
|
|
return 0
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
raise SystemExit(main(sys.argv[1:]))
|