config_commands.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. """Config/defaults management commands for module."""
  2. from __future__ import annotations
  3. import logging
  4. from typer import Exit
  5. from cli.core.config import ConfigManager
  6. from cli.core.input import InputManager
  7. logger = logging.getLogger(__name__)
  8. def config_get(module_instance, var_name: str | None = None) -> None:
  9. """Get default value(s) for this module."""
  10. config = ConfigManager()
  11. if var_name:
  12. # Get specific variable default
  13. value = config.get_default_value(module_instance.name, var_name)
  14. if value is not None:
  15. module_instance.display.info(f"[green]{var_name}[/green] = [yellow]{value}[/yellow]")
  16. else:
  17. module_instance.display.warning(
  18. f"No default set for variable '{var_name}'",
  19. context=f"module '{module_instance.name}'",
  20. )
  21. else:
  22. # Show all defaults (flat list)
  23. defaults = config.get_defaults(module_instance.name)
  24. if defaults:
  25. module_instance.display.info(f"[bold]Config defaults for module '{module_instance.name}':[/bold]")
  26. for config_var_name, var_value in defaults.items():
  27. module_instance.display.info(f" [green]{config_var_name}[/green] = [yellow]{var_value}[/yellow]")
  28. else:
  29. module_instance.display.warning(f"No defaults configured for module '{module_instance.name}'")
  30. def config_set(module_instance, var_name: str, value: str | None = None) -> None:
  31. """Set a default value for a variable."""
  32. config = ConfigManager()
  33. # Parse var_name and value - support both "var value" and "var=value" formats
  34. if "=" in var_name and value is None:
  35. # Format: var_name=value
  36. parts = var_name.split("=", 1)
  37. actual_var_name = parts[0]
  38. actual_value = parts[1]
  39. elif value is not None:
  40. # Format: var_name value
  41. actual_var_name = var_name
  42. actual_value = value
  43. else:
  44. module_instance.display.error(f"Missing value for variable '{var_name}'", context="config set")
  45. module_instance.display.info("[dim]Usage: defaults set VAR_NAME VALUE or defaults set VAR_NAME=VALUE[/dim]")
  46. raise Exit(code=1)
  47. # Set the default value
  48. config.set_default_value(module_instance.name, actual_var_name, actual_value)
  49. module_instance.display.success(f"Set default: [cyan]{actual_var_name}[/cyan] = [yellow]{actual_value}[/yellow]")
  50. module_instance.display.info(
  51. "[dim]This will be used as the default value when generating templates with this module.[/dim]"
  52. )
  53. def config_remove(module_instance, var_name: str) -> None:
  54. """Remove a specific default variable value."""
  55. config = ConfigManager()
  56. defaults = config.get_defaults(module_instance.name)
  57. if not defaults:
  58. module_instance.display.warning(f"No defaults configured for module '{module_instance.name}'")
  59. return
  60. if var_name in defaults:
  61. del defaults[var_name]
  62. config.set_defaults(module_instance.name, defaults)
  63. module_instance.display.success(f"Removed default for '{var_name}'")
  64. else:
  65. module_instance.display.error(f"No default found for variable '{var_name}'")
  66. def config_clear(module_instance, var_name: str | None = None, force: bool = False) -> None:
  67. """Clear default value(s) for this module."""
  68. config = ConfigManager()
  69. defaults = config.get_defaults(module_instance.name)
  70. if not defaults:
  71. module_instance.display.warning(f"No defaults configured for module '{module_instance.name}'")
  72. return
  73. if var_name:
  74. # Clear specific variable
  75. if var_name in defaults:
  76. del defaults[var_name]
  77. config.set_defaults(module_instance.name, defaults)
  78. module_instance.display.success(f"Cleared default for '{var_name}'")
  79. else:
  80. module_instance.display.error(f"No default found for variable '{var_name}'")
  81. else:
  82. # Clear all defaults
  83. if not force:
  84. detail_lines = [
  85. f"This will clear ALL defaults for module '{module_instance.name}':",
  86. "",
  87. ]
  88. for clear_var_name, var_value in defaults.items():
  89. detail_lines.append(f" [green]{clear_var_name}[/green] = [yellow]{var_value}[/yellow]")
  90. module_instance.display.warning("Warning: This will clear ALL defaults")
  91. module_instance.display.info("")
  92. for line in detail_lines:
  93. module_instance.display.info(line)
  94. module_instance.display.info("")
  95. input_mgr = InputManager()
  96. if not input_mgr.confirm("Are you sure?", default=False):
  97. module_instance.display.info("[green]Operation cancelled.[/green]")
  98. return
  99. config.clear_defaults(module_instance.name)
  100. module_instance.display.success(f"Cleared all defaults for module '{module_instance.name}'")
  101. def config_list(module_instance) -> None:
  102. """Display the defaults for this specific module as a table."""
  103. config = ConfigManager()
  104. # Get only the defaults for this module
  105. defaults = config.get_defaults(module_instance.name)
  106. if not defaults:
  107. module_instance.display.warning(f"No defaults configured for module '{module_instance.name}'")
  108. return
  109. # Display defaults using DisplayManager
  110. module_instance.display.heading(f"Defaults for module '{module_instance.name}':")
  111. # Convert defaults to display format (rows for table)
  112. rows = [(f"{var_name}:", str(var_value)) for var_name, var_value in defaults.items()]
  113. module_instance.display.table(headers=None, rows=rows, title="", show_header=False, borderless=True)