Skip to content
This repository was archived by the owner on Jan 23, 2026. It is now read-only.

Commit f45e1ba

Browse files
committed
Add list options for drivers, driver clients, and adapters
1 parent 51d3455 commit f45e1ba

2 files changed

Lines changed: 126 additions & 126 deletions

File tree

  • packages
    • jumpstarter-cli-pkg/jumpstarter_cli_pkg/commands
    • jumpstarter/jumpstarter/models

packages/jumpstarter-cli-pkg/jumpstarter_cli_pkg/commands/list.py

Lines changed: 125 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@
77
from jumpstarter_cli_common.opt import OutputMode, OutputType
88
from jumpstarter_cli_common.table import make_table
99

10-
from ..repository import LocalDriverRepository, V1Alpha1DriverPackageList
10+
from ..repository import (
11+
LocalDriverRepository,
12+
V1Alpha1AdapterEntryPointList,
13+
V1Alpha1DriverClientEntryPointList,
14+
V1Alpha1DriverEntryPointList,
15+
V1Alpha1DriverPackageList,
16+
)
1117

1218
MAX_SUMMARY_LENGTH = 100
1319

@@ -26,135 +32,129 @@ def clean_truncate_summary(summary: Optional[str]):
2632
return truncated_summary
2733

2834

29-
def print_packages(local_drivers: V1Alpha1DriverPackageList, is_wide: bool):
30-
if is_wide:
31-
columns = ["NAME", "VERSION", "INSTALLED", "CATEGORIES", "LICENSE", "SUMMARY"]
32-
else:
33-
columns = ["NAME", "VERSION", "INSTALLED", "CATEGORIES"]
34-
driver_rows = []
35-
for package in local_drivers.items:
36-
driver_rows.append(
37-
{
38-
"INSTALLED": "*" if package.installed else "",
39-
"NAME": package.name,
40-
"VERSION": package.version,
41-
"CATEGORIES": ",".join(package.categories),
42-
"LICENSE": package.license if package.license else "Unspecified",
43-
"SUMMARY": clean_truncate_summary(package.summary),
44-
}
45-
)
46-
click.echo(make_table(columns, driver_rows))
47-
48-
49-
@click.command("list")
50-
@opt_output_all
51-
@handle_exceptions
52-
def list(output: OutputType):
53-
"""List Jumpstarter packages"""
54-
local_repo = LocalDriverRepository.from_venv()
55-
local_drivers = local_repo.list_packages()
35+
def print_packages(packages: V1Alpha1DriverPackageList, output: OutputType):
5636
match output:
5737
case OutputMode.JSON:
58-
click.echo(local_drivers.dump_json())
38+
click.echo(packages.dump_json())
5939
case OutputMode.YAML:
60-
click.echo(local_drivers.dump_yaml())
40+
click.echo(packages.dump_yaml())
6141
case OutputMode.NAME:
62-
for package in local_drivers.items:
63-
for driver in package.drivers.items:
64-
click.echo(f"driver.jumpstarter.dev/{package.name}/{driver.name}")
42+
for package in packages.items:
43+
click.echo(f"package.jumpstarter.dev/{package.name}")
6544
case _:
6645
click.echo("Fetching local packages for current Python environment")
67-
print_packages(local_drivers, is_wide=output == OutputMode.WIDE)
68-
69-
70-
# def print_drivers(driver_packages: V1Alpha1DriverPackageList, is_wide: bool):
71-
# if is_wide:
72-
# columns = ["NAME", "PACKAGE", "VERSION", "TYPE", "CATEGORIES", "LICENSE"]
73-
# else:
74-
# columns = ["NAME", "TYPE"]
75-
# driver_rows = []
76-
# for package in driver_packages.items:
77-
# for driver in package.drivers:
78-
# driver_rows.append(
79-
# {
80-
# "NAME": driver.name,
81-
# "PACKAGE": package.name,
82-
# "VERSION": package.version,
83-
# "TYPE": driver.type,
84-
# "CATEGORIES": ",".join(package.categories),
85-
# "LICENSE": package.license if package.license else "Unspecified",
86-
# }
87-
# )
88-
# click.echo(make_table(columns, driver_rows))
89-
90-
91-
# @list.command("drivers")
92-
# @opt_output_all
93-
# @handle_exceptions
94-
# async def get_drivers(output: OutputType):
95-
# """
96-
# Display all available drivers.
97-
# """
98-
# local_repo = LocalDriverRepository.from_venv()
99-
# local_drivers = local_repo.list_packages()
100-
# match output:
101-
# case OutputMode.JSON:
102-
# click.echo(local_drivers.dump_json())
103-
# case OutputMode.YAML:
104-
# click.echo(local_drivers.dump_yaml())
105-
# case OutputMode.NAME:
106-
# for package in local_drivers.items:
107-
# for driver in package.drivers:
108-
# click.echo(f"driver.jumpstarter.dev/{package.name}/{driver.name}")
109-
# case _:
110-
# print_drivers(local_drivers, is_wide=output == OutputMode.WIDE)
111-
112-
113-
# def print_driver_clients(driver_packages: V1Alpha1DriverPackageList, is_wide: bool):
114-
# if is_wide:
115-
# columns = ["NAME", "PACKAGE", "VERSION", "TYPE", "CATEGORIES", "LICENSE"]
116-
# else:
117-
# columns = ["NAME", "TYPE"]
118-
# driver_rows = []
119-
# for package in driver_packages.items:
120-
# for client in package.clients:
121-
# driver_rows.append(
122-
# {
123-
# "NAME": client.name,
124-
# "PACKAGE": package.name,
125-
# "VERSION": package.version,
126-
# "TYPE": client.type,
127-
# "CATEGORIES": ",".join(package.categories),
128-
# "LICENSE": package.license if package.license else "Unspecified",
129-
# }
130-
# )
131-
# click.echo(make_table(columns, driver_rows))
132-
133-
134-
# @list.command("driver-clients")
135-
# @opt_output_all
136-
# @handle_exceptions
137-
# async def get_driver_clients(output: OutputType):
138-
# """
139-
# Display all available driver clients.
140-
# """
141-
# local_repo = LocalDriverRepository.from_venv()
142-
# local_drivers = local_repo.list_packages()
143-
# match output:
144-
# case OutputMode.JSON:
145-
# click.echo(local_drivers.dump_json())
146-
# case OutputMode.YAML:
147-
# click.echo(local_drivers.dump_yaml())
148-
# case OutputMode.NAME:
149-
# for package in local_drivers.items:
150-
# for driver in package.drivers:
151-
# click.echo(f"driver-client.jumpstarter.dev/{package.name}/{driver.name}")
152-
# case _:
153-
# print_driver_clients(local_drivers, is_wide=output == OutputMode.WIDE)
46+
if output == OutputMode.WIDE:
47+
columns = ["NAME", "VERSION", "INSTALLED", "CATEGORIES", "LICENSE", "SUMMARY"]
48+
else:
49+
columns = ["NAME", "VERSION", "INSTALLED", "CATEGORIES"]
50+
driver_rows = []
51+
for package in packages.items:
52+
driver_rows.append(
53+
{
54+
"INSTALLED": "*" if package.installed else "",
55+
"NAME": package.name,
56+
"VERSION": package.version,
57+
"CATEGORIES": ",".join(package.categories),
58+
"LICENSE": package.license if package.license else "Unspecified",
59+
"SUMMARY": clean_truncate_summary(package.summary),
60+
}
61+
)
62+
click.echo(make_table(columns, driver_rows))
63+
64+
65+
def print_drivers(packages: V1Alpha1DriverPackageList, output: OutputType):
66+
drivers = V1Alpha1DriverEntryPointList()
67+
for package in packages.items:
68+
for driver in package.drivers.items:
69+
drivers.items.append(driver)
70+
match output:
71+
case OutputMode.JSON:
72+
click.echo(drivers.dump_json())
73+
case OutputMode.YAML:
74+
click.echo(drivers.dump_yaml())
75+
case OutputMode.NAME:
76+
for driver in drivers.items:
77+
click.echo(f"driver.jumpstarter.dev/{driver.package}/{driver.name}")
78+
case _:
79+
click.echo("Fetching local packages for current Python environment")
80+
if output == OutputMode.WIDE:
81+
columns = ["NAME", "PACKAGE", "TYPE"]
82+
else:
83+
columns = ["NAME", "PACKAGE", "TYPE"]
84+
driver_rows = []
85+
for driver in drivers.items:
86+
driver_rows.append({"NAME": driver.name, "PACKAGE": driver.package, "TYPE": driver.type})
87+
click.echo(make_table(columns, driver_rows))
88+
89+
90+
def print_driver_clients(packages: V1Alpha1DriverPackageList, output: OutputType):
91+
driver_clients = V1Alpha1DriverClientEntryPointList()
92+
for package in packages.items:
93+
for client in package.driver_clients.items:
94+
driver_clients.items.append(client)
95+
match output:
96+
case OutputMode.JSON:
97+
click.echo(driver_clients.dump_json())
98+
case OutputMode.YAML:
99+
click.echo(driver_clients.dump_yaml())
100+
case OutputMode.NAME:
101+
for client in driver_clients.items:
102+
click.echo(f"client.jumpstarter.dev/{client.package}/{client.name}")
103+
case _:
104+
click.echo("Fetching local packages for current Python environment")
105+
if output == OutputMode.WIDE:
106+
columns = ["NAME", "PACKAGE", "TYPE"]
107+
else:
108+
columns = ["NAME", "PACKAGE", "TYPE"]
109+
driver_client_rows = []
110+
for client in driver_clients.items:
111+
driver_client_rows.append({"NAME": client.name, "PACKAGE": client.package, "TYPE": client.type})
112+
click.echo(make_table(columns, driver_client_rows))
113+
114+
115+
def print_adapters(packages: V1Alpha1DriverPackageList, output: OutputType):
116+
adapters = V1Alpha1AdapterEntryPointList()
117+
for package in packages.items:
118+
for adapter in package.adapters.items:
119+
adapters.items.append(adapter)
120+
match output:
121+
case OutputMode.JSON:
122+
click.echo(adapters.dump_json())
123+
case OutputMode.YAML:
124+
click.echo(adapters.dump_yaml())
125+
case OutputMode.NAME:
126+
for adapter in adapters.items:
127+
click.echo(f"adapter.jumpstarter.dev/{adapter.package}/{adapter.name}")
128+
case _:
129+
click.echo("Fetching local packages for current Python environment")
130+
if output == OutputMode.WIDE:
131+
columns = ["NAME", "PACKAGE", "TYPE"]
132+
else:
133+
columns = ["NAME", "PACKAGE", "TYPE"]
134+
adapter_rows = []
135+
for adapter in adapters.items:
136+
adapter_rows.append({"NAME": adapter.name, "PACKAGE": adapter.package, "TYPE": adapter.type})
137+
click.echo(make_table(columns, adapter_rows))
154138

155139

156-
# @list.command("packages")
157-
# async def get_packages(output: OutputType):
158-
# """
159-
# Display all available jumpstarter driver packages.
160-
# """
140+
@click.command("list")
141+
@click.option("--drivers", is_flag=True, help="Print drivers only.")
142+
@click.option("--driver-clients", is_flag=True, help="Print driver clients only.")
143+
@click.option("--adapters", is_flag=True, help="Print adapters only.")
144+
@opt_output_all
145+
@handle_exceptions
146+
def list(output: OutputType, drivers: bool, driver_clients: bool, adapters: bool):
147+
"""List Jumpstarter packages"""
148+
# Add validation to ensure only one flag is set
149+
if sum([drivers, driver_clients, adapters]) > 1:
150+
raise click.UsageError("Only one of --drivers, --driver-clients, or --adapters can be specified.")
151+
local_repo = LocalDriverRepository.from_venv()
152+
local_packages = local_repo.list_packages()
153+
if drivers:
154+
print_drivers(local_packages, output)
155+
elif driver_clients:
156+
print_driver_clients(local_packages, output)
157+
elif adapters:
158+
print_adapters(local_packages, output)
159+
else:
160+
print_packages(local_packages, output)

packages/jumpstarter/jumpstarter/models/list.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ class UserList(ListBaseModel[User]):
3131

3232
api_version: Literal["jumpstarter.dev/v1alpha1"] = Field(alias="apiVersion", default="jumpstarter.dev/v1alpha1")
3333
kind: Literal["List"] = Field(default="List")
34-
items: list[T]
34+
items: list[T] = []

0 commit comments

Comments
 (0)