|
1 | 1 | import asyncclick as click |
2 | | -from jumpstarter_cli_common import OutputType, opt_output_all |
| 2 | +from jumpstarter_cli_common import OutputMode, OutputType, opt_output_all |
3 | 3 | from jumpstarter_cli_common.exceptions import handle_exceptions |
4 | 4 | from jumpstarter_cli_pkg.repository import LocalDriverRepository |
5 | 5 |
|
6 | 6 |
|
| 7 | +def print_package_details(package: str, drivers: bool, driver_clients: bool, adapters: bool, output: OutputType): |
| 8 | + flag_sum = sum([drivers, driver_clients, adapters]) |
| 9 | + if flag_sum == 0: |
| 10 | + click.echo("Name: " + package.name) |
| 11 | + click.echo("Version: " + package.version) |
| 12 | + click.echo("Summary: " + (package.summary if package.summary else "")) |
| 13 | + click.echo("Categories: " + ", ".join(package.categories)) |
| 14 | + click.echo("License: " + (package.license if package.license else "")) |
| 15 | + |
| 16 | + if flag_sum == 0 or drivers: |
| 17 | + click.echo("Drivers:") |
| 18 | + for driver in package.drivers.items: |
| 19 | + click.echo(f" {driver.name}:") |
| 20 | + click.echo(f" Name: {driver.name}") |
| 21 | + click.echo(f" Type: {driver.type}") |
| 22 | + if flag_sum == 0 or driver_clients: |
| 23 | + click.echo("Driver Clients:") |
| 24 | + for driver_client in package.driver_clients.items: |
| 25 | + click.echo(f" {driver_client.name}:") |
| 26 | + click.echo(f" Name: {driver_client.name}") |
| 27 | + click.echo(f" Type: {driver_client.type}") |
| 28 | + if flag_sum == 0 or adapters: |
| 29 | + click.echo("Adapters:") |
| 30 | + for adapter in package.adapters.items: |
| 31 | + click.echo(f" {adapter.name}:") |
| 32 | + click.echo(f" Name: {adapter.name}") |
| 33 | + click.echo(f" Type: {adapter.type}") |
| 34 | + |
| 35 | + |
7 | 36 | @click.command("show") |
8 | 37 | @click.argument("package") |
9 | 38 | @click.option("--drivers", is_flag=True, help="Print drivers only.") |
|
12 | 41 | @opt_output_all |
13 | 42 | @handle_exceptions |
14 | 43 | def show(package: str, drivers: bool, driver_clients: bool, adapters: bool, output: OutputType): |
| 44 | + """ |
| 45 | + Show a Jumpstarter plugin package details. |
| 46 | + """ |
| 47 | + # Add validation to ensure only one flag is set |
| 48 | + if sum([drivers, driver_clients, adapters]) > 1: |
| 49 | + raise click.UsageError("Only one of --drivers, --driver-clients, or --adapters can be specified.") |
| 50 | + |
15 | 51 | local_repo = LocalDriverRepository.from_venv() |
16 | 52 | local_package = local_repo.get_package(package) |
17 | | - click.echo("Name: " + local_package.name) |
18 | | - click.echo("Version: " + local_package.version) |
19 | | - click.echo("Summary: " + (local_package.summary if local_package.summary else "")) |
20 | | - click.echo("Categories: " + ", ".join(local_package.categories)) |
21 | | - click.echo("License: " + (local_package.license if local_package.license else "")) |
22 | | - click.echo("Drivers:") |
23 | | - for driver in local_package.drivers.items: |
24 | | - click.echo(f" {driver.name}:") |
25 | | - click.echo(f" Name: {driver.name}") |
26 | | - click.echo(f" Type: {driver.type}") |
27 | | - click.echo("Driver Clients:") |
28 | | - for driver_client in local_package.driver_clients.items: |
29 | | - click.echo(f" {driver_client.name}:") |
30 | | - click.echo(f" Name: {driver_client.name}") |
31 | | - click.echo(f" Type: {driver_client.type}") |
32 | | - click.echo("Adapters:") |
33 | | - for adapter in local_package.adapters.items: |
34 | | - click.echo(f" {driver_client.name}:") |
35 | | - click.echo(f" Name: {adapter.name}") |
36 | | - click.echo(f" Type: {adapter.type}") |
| 53 | + |
| 54 | + match output: |
| 55 | + case OutputMode.JSON: |
| 56 | + if drivers: |
| 57 | + click.echo(local_package.drivers.dump_json()) |
| 58 | + elif driver_clients: |
| 59 | + click.echo(local_package.driver_clients.dump_json()) |
| 60 | + elif adapters: |
| 61 | + click.echo(local_package.adapters.dump_json()) |
| 62 | + else: |
| 63 | + click.echo(local_package.dump_json()) |
| 64 | + case OutputMode.YAML: |
| 65 | + if drivers: |
| 66 | + click.echo(local_package.drivers.dump_yaml()) |
| 67 | + elif driver_clients: |
| 68 | + click.echo(local_package.driver_clients.dump_yaml()) |
| 69 | + elif adapters: |
| 70 | + click.echo(local_package.adapters.dump_yaml()) |
| 71 | + else: |
| 72 | + click.echo(local_package.dump_yaml()) |
| 73 | + case _: |
| 74 | + print_package_details(local_package, drivers, driver_clients, adapters, output) |
0 commit comments