Coverage for cli/commands/config_cmd.py: 89.80%
41 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-30 21:22 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-30 21:22 +0000
1"""Configuration commands."""
3import sys
4from typing import Any
6import click
8from ..config import GCOConfig
9from ..output import get_output_formatter
11pass_config = click.make_pass_decorator(GCOConfig, ensure=True)
14@click.group(name="config-cmd")
15@pass_config
16def config_cmd(config: Any) -> None:
17 """Manage CLI configuration."""
18 pass
21@config_cmd.command("show")
22@pass_config
23def show_config(config: Any) -> None:
24 """Show current configuration."""
25 formatter = get_output_formatter(config)
26 formatter.print(config.to_dict())
29@config_cmd.command("get")
30@click.argument("key", required=False)
31@pass_config
32def get_config(config: Any, key: Any) -> None:
33 """Read a configuration value by KEY (dotted path), or the full config.
35 Examples:
36 gco config-cmd get
37 gco config-cmd get default_region
38 """
39 formatter = get_output_formatter(config)
40 data = config.to_dict()
41 if not key: 41 ↛ 42line 41 didn't jump to line 42 because the condition on line 41 was never true
42 formatter.print(data)
43 return
45 node: Any = data
46 for part in key.split("."):
47 if isinstance(node, dict) and part in node:
48 node = node[part]
49 else:
50 formatter.print_error(f"Config key not found: {key}")
51 sys.exit(1)
52 formatter.print({key: node})
55@config_cmd.command("init")
56@click.option("--force", "-f", is_flag=True, help="Overwrite existing config")
57@pass_config
58def init_config(config: Any, force: Any) -> None:
59 """Initialize configuration file."""
60 from pathlib import Path
62 config_path = Path.home() / ".gco" / "config.yaml"
64 if config_path.exists() and not force: 64 ↛ 65line 64 didn't jump to line 65 because the condition on line 64 was never true
65 click.confirm(f"Config file exists at {config_path}. Overwrite?", abort=True)
67 config.save(str(config_path))
68 click.echo(f"Configuration saved to {config_path}")