74 lines
2.3 KiB
Python

import click
import requests
from .cli_main import main, auth_header, base_url
from ...schemas import StateParams
@main.group("state")
def state():
pass
@state.command("list")
def state_list():
click.echo("Listing known states...")
try:
response = requests.get(f'{base_url()}/state', headers=auth_header())
response.raise_for_status()
click.echo("States:")
for st in response.json():
click.echo(f" - {st}")
except requests.exceptions.HTTPError as e:
raise click.ClickException(f"Failed to list states:\n{e}")
@state.command("show")
@click.argument("name")
def state_show(name: str):
click.echo(f"Showing state '{name}'...")
try:
data = StateParams()
response = requests.get(f'{base_url()}/state/{name}', headers=auth_header(), params=data.model_dump())
response.raise_for_status()
click.echo("State details:")
for key, value in response.json().items():
if isinstance(value, dict):
click.echo(f" {key}:")
for sub_key, sub_val in value.items():
click.echo(f" {sub_key}: {sub_val}")
else:
click.echo(f" {key}: {value}")
except requests.exceptions.HTTPError as e:
raise click.ClickException(f"Failed to show state:\n{e}")
@state.command("create")
@click.argument("name")
def state_create(name: str):
click.echo(f"Creating state '{name}'...")
try:
data = StateParams()
response = requests.post(f'{base_url()}/state/{name}', headers=auth_header(), json=data.model_dump())
response.raise_for_status()
click.echo("State created successfully:")
for key, value in response.json().items():
click.echo(f" {key}: {value}")
except requests.exceptions.HTTPError as e:
raise click.ClickException(f"Failed to create state:\n{e}")
@state.command("delete")
@click.argument("name")
def state_delete(name: str):
click.echo(f"Deleting state '{name}'...")
try:
response = requests.delete(f'{base_url()}/state/{name}', headers=auth_header())
response.raise_for_status()
click.echo("State deleted successfully.")
except requests.exceptions.HTTPError as e:
raise click.ClickException(f"Failed to delete state:\n{e}")