Source code for numistalib.cli.issuers

"""Issuers CLI commands."""

import asyncio

import click

from numistalib.cli.theme import CLISettings
from numistalib.config import Settings
from numistalib.models import Issuer
from numistalib.services import IssuerService

# pyright: reportUnusedFunction = false


[docs] def register_issuers_commands(parent: click.Group) -> None: """Register issuers commands with parent group. Parameters ---------- parent : click.Group Parent click group to attach commands to """ @click.command(name="issuers") @click.option("--lang", default="en", type=click.Choice(["en", "es", "fr"]), help="Language") @click.option("--limit", type=int, default=50, help="Results per page") @click.option("-t", "--table", is_flag=True, help="Render results as a table") def issuers(lang: str, limit: int, table: bool) -> None: """List issuing entities (panel default, table with -t/--table).""" console = CLISettings.console() settings = Settings() client = Settings.to_async_client(settings) service = IssuerService(client) model_cls = service.MODEL try: issuers_list: list[Issuer] = [] async def consume_issuers() -> list[Issuer]: """Consume all issuers from the paginated service.""" async for issuer in service.get_issuers_paginated(lang=lang, limit=limit): issuers_list.append(issuer) return issuers_list issuers_list = asyncio.run(consume_issuers()) if not issuers_list: console.print("[warning]No issuers found[/warning]") return if table: output = model_cls.render_table(issuers_list, "Issuers") console.print(output) else: for issuer in issuers_list: panel = service._format_panel(issuer) console.print(panel) console.print(f"\n[success]Found {len(issuers_list)} issuer{'s' if len(issuers_list) != 1 else ''}[/success]") except (RuntimeError, OSError, ValueError) as err: service.handle_cli_error(err, "listing issuers", "isr-list") parent.add_command(issuers, name="issuers") parent.add_command(issuers, name="isr")