src.sysadmin.commandline_adapter

Command-line adapter for sysadmin operations.

 1"""Command-line adapter for sysadmin operations."""
 2
 3import os
 4import sys
 5
 6import msgspec
 7
 8from src.metadata.credential_issuer_metadata import CredentialIssuerMetadata
 9from src.metadata.postgresql_adapter import PostgreSQLMetadataRepository
10
11from .sysadmin_service import SysadminService
12
13_USAGE = """\
14Usage: ec-issuer-cli <command> [args]
15
16Commands:
17  update-issuer-metadata   Store credential issuer metadata JSON from stdin.
18
19Examples:
20  Update metadata from a json file on disk
21  ec-issuer-cli update-issuer-metadata < ~/metadata_example.json
22"""
23
24
25def _build_service() -> SysadminService:
26    connection_string = os.environ["POSTGRES_CONNECTION_STRING"]
27    metadata_repository = PostgreSQLMetadataRepository(connection_string)
28    return SysadminService(metadata_repository=metadata_repository)
29
30
31def _cmd_update_issuer_metadata() -> None:
32    content = sys.stdin.read()
33    try:
34        metadata = msgspec.json.decode(content, type=CredentialIssuerMetadata)
35    except msgspec.DecodeError as e:
36        print(f"Error: invalid metadata JSON: {e}", file=sys.stderr)
37        sys.exit(1)
38
39    _build_service().update_credential_issuer_metadata(metadata)
40    print("Credential issuer metadata updated.")
41
42
43def main() -> None:
44    """Entry point for the ec-issuer-cli command."""
45    match sys.argv[1:]:
46        case ["update-issuer-metadata"]:
47            _cmd_update_issuer_metadata()
48        case _:
49            print(_USAGE, file=sys.stderr)
50            sys.exit(1)
51
52
53if __name__ == "__main__":
54    main()
def main() -> None:
44def main() -> None:
45    """Entry point for the ec-issuer-cli command."""
46    match sys.argv[1:]:
47        case ["update-issuer-metadata"]:
48            _cmd_update_issuer_metadata()
49        case _:
50            print(_USAGE, file=sys.stderr)
51            sys.exit(1)

Entry point for the ec-issuer-cli command.