77from jumpstarter_cli_common .opt import OutputMode , OutputType
88from 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
1218MAX_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 )
0 commit comments