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

1"""Configuration commands.""" 

2 

3import sys 

4from typing import Any 

5 

6import click 

7 

8from ..config import GCOConfig 

9from ..output import get_output_formatter 

10 

11pass_config = click.make_pass_decorator(GCOConfig, ensure=True) 

12 

13 

14@click.group(name="config-cmd") 

15@pass_config 

16def config_cmd(config: Any) -> None: 

17 """Manage CLI configuration.""" 

18 pass 

19 

20 

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()) 

27 

28 

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. 

34 

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 

44 

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}) 

53 

54 

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 

61 

62 config_path = Path.home() / ".gco" / "config.yaml" 

63 

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) 

66 

67 config.save(str(config_path)) 

68 click.echo(f"Configuration saved to {config_path}")