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

Commit 7ad0b58

Browse files
committed
Add additional output to show command to match pip implementation
1 parent 35f128c commit 7ad0b58

3 files changed

Lines changed: 54 additions & 32 deletions

File tree

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

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,76 +6,87 @@
66
from ..repository import LocalDriverRepository, V1Alpha1DriverPackage
77

88

9-
def print_package_info(package: V1Alpha1DriverPackage):
9+
def print_package_info(package: V1Alpha1DriverPackage, verbose: bool):
1010
"""Print basic package information."""
11+
dist = package.get_distribution()
1112
click.echo("Name: " + package.name)
1213
click.echo("Version: " + package.version)
1314
click.echo("Summary: " + (package.summary if package.summary else ""))
14-
click.echo("Categories: " + ", ".join(package.categories))
15+
click.echo("Home-page: " + dist.metadata.get("Home-Page", ""))
16+
click.echo("Author: " + dist.metadata.get("Author", ""))
17+
click.echo("Author-email: " + dist.metadata.get("Author-email", ""))
1518
click.echo("License: " + (package.license if package.license else ""))
19+
click.echo("Location: " + dist.metadata.get("Location", ""))
20+
click.echo("Requires: " + dist.metadata.get("Requires", ""))
21+
click.echo("Metadata-Version: " + dist.metadata.get("Metadata-Version", ""))
22+
# Only show installer and classifiers for verbose output
23+
if verbose:
24+
click.echo("Installer: " + dist.metadata.get("Installer", ""))
25+
click.echo("Classifiers: " + dist.metadata.get("Classifiers", ""))
26+
click.echo("Categories: " + ", ".join(package.categories))
1627

1728

1829
def print_drivers(package: V1Alpha1DriverPackage, inspect: bool):
1930
"""Print drivers information."""
2031
click.echo("Drivers:")
2132
for driver in package.drivers.items:
22-
click.echo(f" {driver.name}:")
23-
click.echo(f" Module: {driver.module}")
24-
click.echo(f" Class: {driver.class_name}")
25-
click.echo(f" Type: {driver.type}")
33+
click.echo(f" {driver.name}:")
34+
click.echo(f" Module: {driver.module}")
35+
click.echo(f" Class: {driver.class_name}")
36+
click.echo(f" Type: {driver.type}")
2637

2738
client_type_out = driver.client_type if driver.client_type else "(not available)"
2839
if not inspect:
2940
client_type_out = "(run this command with --inspect to see the client type)"
30-
click.echo(f" Client: {client_type_out}")
41+
click.echo(f" Client: {client_type_out}")
3142

3243
summary_out = driver.summary if driver.summary else "(not available)"
3344
if not inspect:
3445
summary_out = "(run this command with --inspect to see the summary)"
35-
click.echo(f" Summary: {summary_out}")
46+
click.echo(f" Summary: {summary_out}")
3647

3748

3849
def print_driver_clients(package: V1Alpha1DriverPackage, inspect: bool):
3950
"""Print driver clients information."""
40-
click.echo("Driver Clients:")
51+
click.echo("Driver-Clients:")
4152
for driver_client in package.driver_clients.items:
42-
click.echo(f" {driver_client.name}:")
43-
click.echo(f" Module: {driver_client.module}")
44-
click.echo(f" Class: {driver_client.class_name}")
45-
click.echo(f" Type: {driver_client.type}")
53+
click.echo(f" {driver_client.name}:")
54+
click.echo(f" Module: {driver_client.module}")
55+
click.echo(f" Class: {driver_client.class_name}")
56+
click.echo(f" Type: {driver_client.type}")
4657

4758
summary_out = driver_client.summary if driver_client.summary else "(not available)"
4859
if not inspect:
4960
summary_out = "(run this command with --inspect to see the summary)"
50-
click.echo(f" Summary: {summary_out}")
61+
click.echo(f" Summary: {summary_out}")
5162
cli_out = "Yes" if driver_client.cli else "No"
5263
if not inspect:
5364
cli_out = "(run this command with --inspect to check if a CLI is available)"
54-
click.echo(f" Has CLI: {cli_out}")
65+
click.echo(f" Has-CLI: {cli_out}")
5566

5667

5768
def print_adapters(package: V1Alpha1DriverPackage, inspect: bool):
5869
"""Print adapters information."""
5970
click.echo("Adapters:")
6071
for adapter in package.adapters.items:
61-
click.echo(f" {adapter.name}:")
62-
click.echo(f" Module: {adapter.module}")
63-
click.echo(f" Function: {adapter.function_name}")
64-
click.echo(f" Type: {adapter.type}")
72+
click.echo(f" {adapter.name}:")
73+
click.echo(f" Module: {adapter.module}")
74+
click.echo(f" Function: {adapter.function_name}")
75+
click.echo(f" Type: {adapter.type}")
6576
summary_out = adapter.summary if adapter.summary else "(not available)"
6677
if not inspect:
6778
summary_out = "(run this command with --inspect to see the summary)"
68-
click.echo(f" Summary: {summary_out}")
79+
click.echo(f" Summary: {summary_out}")
6980

7081

7182
def print_package_details(
72-
package: V1Alpha1DriverPackage, drivers: bool, driver_clients: bool, adapters: bool, inspect: bool
83+
package: V1Alpha1DriverPackage, drivers: bool, driver_clients: bool, adapters: bool, inspect: bool, verbose: bool
7384
):
7485
"""Print package details based on the specified flags."""
7586
flag_sum = sum([drivers, driver_clients, adapters])
7687

7788
if flag_sum == 0:
78-
print_package_info(package)
89+
print_package_info(package, verbose)
7990

8091
if flag_sum == 0 or drivers:
8192
print_drivers(package, inspect)
@@ -94,8 +105,11 @@ def print_package_details(
94105
@opt_adapters
95106
@opt_inspect
96107
@opt_output_all
108+
@click.option("--verbose", "-v", is_flag=True, help="Show verbose output.")
97109
@handle_exceptions
98-
def show(package: str, drivers: bool, driver_clients: bool, adapters: bool, output: OutputType, inspect: bool):
110+
def show(
111+
package: str, drivers: bool, driver_clients: bool, adapters: bool, output: OutputType, inspect: bool, verbose: bool
112+
):
99113
"""
100114
Show a Jumpstarter plugin package details.
101115
"""
@@ -126,4 +140,4 @@ def show(package: str, drivers: bool, driver_clients: bool, adapters: bool, outp
126140
else:
127141
click.echo(local_package.dump_yaml())
128142
case _:
129-
print_package_details(local_package, drivers, driver_clients, adapters, inspect)
143+
print_package_details(local_package, drivers, driver_clients, adapters, inspect, verbose)

packages/jumpstarter-cli-pkg/jumpstarter_cli_pkg/repository/entry_points.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,16 @@ def from_entry_point(ep: EntryPoint, should_inspect: bool = False):
132132
value_split = ep.value.split(":")
133133
module = value_split[0]
134134
function_name = value_split[1]
135-
return V1Alpha1AdapterEntryPoint(
136-
_entry_point=ep,
135+
adapter = V1Alpha1AdapterEntryPoint(
137136
name=ep.name,
138137
module=module,
139138
function_name=function_name,
140139
type=ep.value.replace(":", "."),
141140
package=ep.dist.name,
142141
summary=summary,
143142
)
143+
adapter._entry_point = ep
144+
return adapter
144145

145146

146147
class V1Alpha1DriverClientEntryPoint(JsonBaseModel):
@@ -173,8 +174,7 @@ def from_entry_point(ep: EntryPoint, should_inspect: bool = False):
173174
value_split = ep.value.split(":")
174175
module = value_split[0]
175176
class_name = value_split[1]
176-
return V1Alpha1DriverClientEntryPoint(
177-
_entry_point=ep,
177+
driver_client = V1Alpha1DriverClientEntryPoint(
178178
name=ep.name,
179179
module=module,
180180
class_name=class_name,
@@ -183,6 +183,8 @@ def from_entry_point(ep: EntryPoint, should_inspect: bool = False):
183183
summary=summary,
184184
cli=cli,
185185
)
186+
driver_client._entry_point = ep
187+
return driver_client
186188

187189

188190
class V1Alpha1DriverEntryPoint(JsonBaseModel):
@@ -226,8 +228,7 @@ def from_entry_point(ep: EntryPoint, should_inspect: bool = False):
226228
value_split = ep.value.split(":")
227229
module = value_split[0]
228230
class_name = value_split[1]
229-
return V1Alpha1DriverEntryPoint(
230-
_entry_point=ep,
231+
driver = V1Alpha1DriverEntryPoint(
231232
name=ep.name,
232233
module=module,
233234
class_name=class_name,
@@ -236,6 +237,8 @@ def from_entry_point(ep: EntryPoint, should_inspect: bool = False):
236237
summary=summary,
237238
client_type=client_type,
238239
)
240+
driver._entry_point = ep
241+
return driver
239242

240243

241244
class V1Alpha1AdapterEntryPointList(ListBaseModel[V1Alpha1AdapterEntryPoint]):

packages/jumpstarter-cli-pkg/jumpstarter_cli_pkg/repository/package.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ def from_distribution(dist: Distribution, should_inspect: bool):
109109
if len(drivers) + len(driver_clients) + len(adapters) == 0:
110110
raise JumpstarterException(f"No valid Jumpstarter entry points found for package '{dist.name}'")
111111
# Return the completed driver package
112-
return V1Alpha1DriverPackage(
113-
_distribution=dist,
112+
package = V1Alpha1DriverPackage(
114113
name=dist.name,
115114
categories=V1Alpha1DriverPackage.requires_dist_to_categories(
116115
dist.name, dist.metadata.get_all("Requires-Dist")
@@ -122,6 +121,12 @@ def from_distribution(dist: Distribution, should_inspect: bool):
122121
driver_clients=V1Alpha1DriverClientEntryPointList(items=driver_clients),
123122
adapters=V1Alpha1AdapterEntryPointList(items=adapters),
124123
)
124+
# Set hidden property for distribution
125+
package._distribution = dist
126+
return package
127+
128+
def get_distribution(self) -> Distribution:
129+
return self._distribution
125130

126131
def list_drivers(self) -> V1Alpha1DriverEntryPointList:
127132
return self.drivers

0 commit comments

Comments
 (0)