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

Commit 21144f7

Browse files
committed
Dedup output mode handling
1 parent 33df711 commit 21144f7

5 files changed

Lines changed: 29 additions & 25 deletions

File tree

packages/jumpstarter-cli-common/jumpstarter_cli_common/opt.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import asyncclick as click
44

5+
from jumpstarter.common.pydantic import OutputMode
6+
57
opt_log_level = click.option(
68
"--log-level",
79
"log_level",
@@ -20,15 +22,6 @@
2022
opt_labels = click.option("-l", "--label", "labels", type=(str, str), multiple=True, help="Labels")
2123

2224

23-
class OutputMode(str):
24-
JSON = "json"
25-
YAML = "yaml"
26-
NAME = "name"
27-
PATH = "path"
28-
29-
30-
OutputType = Optional[OutputMode]
31-
3225
opt_output_all = click.option(
3326
"-o",
3427
"--output",

packages/jumpstarter-cli/jumpstarter_cli/create.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,8 @@ async def create_lease(config, selector: str, duration: timedelta, output: Outpu
5555
lease = config.create_lease(selector=selector, duration=duration)
5656

5757
match output:
58-
case OutputMode.JSON:
59-
click.echo(lease.dump_json())
60-
case OutputMode.YAML:
61-
click.echo(lease.dump_yaml())
58+
case OutputMode.JSON | OutputMode.YAML:
59+
click.echo(lease.dump(output))
6260
case OutputMode.NAME:
6361
click.echo(lease.name)
6462
case _:

packages/jumpstarter-cli/jumpstarter_cli/get.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,8 @@ def get_exporters(config, selector: str | None, output: OutputType):
2525
exporters = config.list_exporters(filter=selector)
2626

2727
match output:
28-
case OutputMode.JSON:
29-
click.echo(exporters.dump_json())
30-
case OutputMode.YAML:
31-
click.echo(exporters.dump_yaml())
28+
case OutputMode.JSON | OutputMode.YAML:
29+
click.echo(exporters.dump(output))
3230
case OutputMode.NAME:
3331
for exporter in exporters.exporters:
3432
click.echo(exporter.name)
@@ -57,10 +55,8 @@ def get_leases(config, selector: str | None, output: OutputType):
5755
leases = config.list_leases(filter=selector)
5856

5957
match output:
60-
case OutputMode.JSON:
61-
click.echo(leases.dump_json())
62-
case OutputMode.YAML:
63-
click.echo(leases.dump_yaml())
58+
case OutputMode.JSON | OutputMode.YAML:
59+
click.echo(leases.dump(output))
6460
case OutputMode.NAME:
6561
for lease in leases.leases:
6662
click.echo(lease.name)

packages/jumpstarter-cli/jumpstarter_cli/update.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,8 @@ async def update_lease(config, name: str, duration: timedelta, output: OutputTyp
2828
lease = config.update_lease(name, duration)
2929

3030
match output:
31-
case OutputMode.JSON:
32-
click.echo(lease.dump_json())
33-
case OutputMode.YAML:
34-
click.echo(lease.dump_yaml())
31+
case OutputMode.JSON | OutputMode.YAML:
32+
click.echo(lease.dump(output))
3533
case OutputMode.NAME:
3634
click.echo(lease.name)
3735
case _:

packages/jumpstarter/jumpstarter/common/pydantic.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,26 @@
22
from pydantic import BaseModel
33

44

5+
class OutputMode(str):
6+
JSON = "json"
7+
YAML = "yaml"
8+
NAME = "name"
9+
PATH = "path"
10+
11+
12+
OutputType = OutputMode | None
13+
14+
515
class SerializableBaseModel(BaseModel):
16+
def dump(self, mode: OutputType = None):
17+
match mode:
18+
case OutputMode.JSON:
19+
return self.dump_json()
20+
case OutputMode.YAML:
21+
return self.dump_yaml()
22+
case _:
23+
raise NotImplementedError("unimplemented output mode: {}".format(mode))
24+
625
def dump_json(self):
726
return self.model_dump_json(indent=4, by_alias=True)
827

0 commit comments

Comments
 (0)