mirror of
https://github.com/baketnk/frame-yap.git
synced 2026-10-06 01:00:04 +02:00
58 lines
2.4 KiB
Python
Executable File
58 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Offline backend inventory and pinned file status; never downloads or imports ASR."""
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
# Installed release inventories must remain unchanged by status queries.
|
|
sys.dont_write_bytecode = True
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "python"))
|
|
from frameyap.model_files import DEFAULT_MANIFEST_DIR, ManifestError, check_model, load_backends
|
|
|
|
|
|
def main(argv=None):
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
group = parser.add_mutually_exclusive_group(required=True)
|
|
group.add_argument("--list-models", action="store_true")
|
|
group.add_argument("--check-model", metavar="ID")
|
|
parser.add_argument("--manifest-dir", type=Path, default=DEFAULT_MANIFEST_DIR)
|
|
parser.add_argument("--model-dir", type=Path,
|
|
help="direct model directory for --check-model; store root containing ID/ directories for --list-models")
|
|
parser.add_argument("--json", action="store_true", help="stable schema v1 on stdout")
|
|
args = parser.parse_args(argv)
|
|
if args.check_model and args.model_dir is None:
|
|
parser.error("--check-model requires --model-dir")
|
|
try:
|
|
backends = load_backends(args.manifest_dir)
|
|
except ManifestError as error:
|
|
parser.error(str(error))
|
|
if args.check_model:
|
|
if args.check_model not in backends:
|
|
parser.error("unknown backend id")
|
|
result = check_model(backends[args.check_model], args.model_dir)
|
|
payload = {"schema": 1, "model": result}
|
|
code = 0 if result["state"] == "installed_verified" else 1
|
|
else:
|
|
models = []
|
|
for ident, backend in backends.items():
|
|
if args.model_dir is not None:
|
|
models.append(check_model(backend, args.model_dir / ident))
|
|
else:
|
|
result = backend.description()
|
|
result.update(state="unknown", reason="model_dir_unspecified", file=None)
|
|
models.append(result)
|
|
payload = {"schema": 1, "models": models}
|
|
code = 0
|
|
if args.json:
|
|
print(json.dumps(payload, ensure_ascii=False, sort_keys=True))
|
|
else:
|
|
for model in payload.get("models", [payload.get("model")]):
|
|
print(f"{model['id']} ({model['display_name']}): {model['state']}" +
|
|
(f" [{model['reason']}: {model['file']}]" if model['reason'] else ""))
|
|
return code
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|