Coverage for src/fastapi_cloud_cli/commands/env/list.py: 100%
43 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-11-09 00:25 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-11-09 00:25 +0000
1from pathlib import Path 1abcdefg
2from typing import Annotated, Any 1abcdefg
4import typer 1abcdefg
5from pydantic import BaseModel 1abcdefg
6from rich.table import Table 1abcdefg
7from rich.text import Text 1abcdefg
8from rich_toolkit import RichToolkit 1abcdefg
10from fastapi_cloud_cli.api import APIClient, EnvironmentVariable 1abcdefg
11from fastapi_cloud_cli.commands._auth import UserCommand, get_user_command_context 1abcdefg
12from fastapi_cloud_cli.commands.env._app import env_app 1abcdefg
13from fastapi_cloud_cli.commands.env._shared import ( 1abcdefg
14 ENV_VAR_VALUE_MAX_LENGTH,
15 _format_env_var_value,
16)
17from fastapi_cloud_cli.utils.apps import resolve_app_id_or_fail 1abcdefg
18from fastapi_cloud_cli.utils.dates import format_last_updated 1abcdefg
19from fastapi_cloud_cli.utils.execution import JsonOutputOption 1abcdefg
22class EnvironmentVariablesListOutput(BaseModel): 1abcdefg
23 app_id: str 1abcdefg
24 variables: list[EnvironmentVariable] 1abcdefg
27def _get_environment_variables_table( 1abcdefg
28 environment_variables: list[EnvironmentVariable],
29) -> Table:
30 table = Table.grid(padding=(0, 2), pad_edge=False) 1hijklmnopqrstuvwxyzABCDEFGHI
31 table.add_column("Key", no_wrap=True) 1hijklmnopqrstuvwxyzABCDEFGHI
32 table.add_column("Value", overflow="ellipsis", max_width=ENV_VAR_VALUE_MAX_LENGTH) 1hijklmnopqrstuvwxyzABCDEFGHI
33 table.add_column("Last updated", style="dim", no_wrap=True) 1hijklmnopqrstuvwxyzABCDEFGHI
34 table.add_row("[bold]Key[/bold]", "[bold]Value[/bold]", "[bold]Last updated[/bold]") 1hijklmnopqrstuvwxyzABCDEFGHI
35 table.add_row("", "", "") 1hijklmnopqrstuvwxyzABCDEFGHI
37 for env_var in environment_variables: 1hijklmnopqrstuvwxyzABCDEFGHI
38 table.add_row( 1hijklmnopqrstuvwxyzABCDEFGHI
39 Text(env_var.name),
40 _format_env_var_value(env_var),
41 Text(format_last_updated(env_var.updated_at)),
42 )
44 return table 1hijklmnopqrstuvwxyzABCDEFGHI
47def _render_environment_variables_list_output( 1abJcdKefgL
48 data: EnvironmentVariablesListOutput, toolkit: RichToolkit
49) -> None:
50 toolkit.print_title("environment variables") 1MhijkJlmnoNpqrsKtuvwOxyzAPBCDELFGHI
51 toolkit.print_line() 1MhijkJlmnoNpqrsKtuvwOxyzAPBCDELFGHI
53 if not data.variables: 1MhijkJlmnoNpqrsKtuvwOxyzAPBCDELFGHI
54 toolkit.print("No environment variables found.", bullet=False) 1MJNKOPL
55 return 1MJNKOPL
57 toolkit.print(_get_environment_variables_table(data.variables), bullet=False) 1hijklmnopqrstuvwxyzABCDEFGHI
60@env_app.command("list", cls=UserCommand) 1abcdefg
61def list_variables( 1ab=cd?efg@
62 ctx: typer.Context,
63 path: Annotated[
64 Path | None,
65 typer.Option(
66 "--path",
67 help=(
68 "Path to the directory with your app's pyproject.toml "
69 "(defaults to current directory)"
70 ),
71 ),
72 ] = None,
73 app_id: Annotated[
74 str | None,
75 typer.Option(
76 "--app-id",
77 help="ID of the app whose environment variables should be listed.",
78 ),
79 ] = None,
80 json_output: JsonOutputOption = False,
81) -> Any:
82 """
83 List the environment variables for the app.
84 """
86 toolkit = get_user_command_context(ctx).toolkit 1#QR$M4hijk%ST'J5lmno(UV)N6pqrs*WX+K7tuvw,YZ-O8xyzA.01/P9BCDE:23;L!FGHI
88 target_app_id = resolve_app_id_or_fail(toolkit, app_id=app_id, path=path) 1#QR$M4hijk%ST'J5lmno(UV)N6pqrs*WX+K7tuvw,YZ-O8xyzA.01/P9BCDE:23;L!FGHI
90 with APIClient() as client: 1QRM4hijkSTJ5lmnoUVN6pqrsWXK7tuvwYZO8xyzA01P9BCDE23L!FGHI
91 with toolkit.progress( 1QRM4hijkSTJ5lmnoUVN6pqrsWXK7tuvwYZO8xyzA01P9BCDE23L!FGHI
92 "Fetching environment variables...", transient=True
93 ) as progress:
94 with client.handle_http_errors(progress): 1QRM4hijkSTJ5lmnoUVN6pqrsWXK7tuvwYZO8xyzA01P9BCDE23L!FGHI
95 environment_variables = client.get_environment_variables( 1QRM4hijkSTJ5lmnoUVN6pqrsWXK7tuvwYZO8xyzA01P9BCDE23L!FGHI
96 app_id=target_app_id
97 )
99 toolkit.success( 1QRMhijkSTJlmnoUVNpqrsWXKtuvwYZOxyzA01PBCDE23LFGHI
100 EnvironmentVariablesListOutput(
101 app_id=target_app_id,
102 variables=environment_variables.data,
103 ),
104 render_output=_render_environment_variables_list_output,
105 )