config_commands.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. """Config/defaults management commands for module."""
  2. from __future__ import annotations
  3. import logging
  4. from rich.prompt import Confirm
  5. from typer import Exit
  6. from ..config import ConfigManager
  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.display_info(
  16. f"[green]{var_name}[/green] = [yellow]{value}[/yellow]"
  17. )
  18. else:
  19. module_instance.display.display_warning(
  20. f"No default set for variable '{var_name}'",
  21. context=f"module '{module_instance.name}'",
  22. )
  23. else:
  24. # Show all defaults (flat list)
  25. defaults = config.get_defaults(module_instance.name)
  26. if defaults:
  27. module_instance.display.display_info(
  28. f"[bold]Config defaults for module '{module_instance.name}':[/bold]"
  29. )
  30. for config_var_name, var_value in defaults.items():
  31. module_instance.display.display_info(
  32. f" [green]{config_var_name}[/green] = [yellow]{var_value}[/yellow]"
  33. )
  34. else:
  35. module_instance.display.display_warning(
  36. f"No defaults configured for module '{module_instance.name}'"
  37. )
  38. def config_set(module_instance, var_name: str, value: str | None = None) -> None:
  39. """Set a default value for a variable."""
  40. config = ConfigManager()
  41. # Parse var_name and value - support both "var value" and "var=value" formats
  42. if "=" in var_name and value is None:
  43. # Format: var_name=value
  44. parts = var_name.split("=", 1)
  45. actual_var_name = parts[0]
  46. actual_value = parts[1]
  47. elif value is not None:
  48. # Format: var_name value
  49. actual_var_name = var_name
  50. actual_value = value
  51. else:
  52. module_instance.display.display_error(
  53. f"Missing value for variable '{var_name}'", context="config set"
  54. )
  55. module_instance.display.display_info(
  56. "[dim]Usage: defaults set VAR_NAME VALUE or defaults set VAR_NAME=VALUE[/dim]"
  57. )
  58. raise Exit(code=1)
  59. # Set the default value
  60. config.set_default_value(module_instance.name, actual_var_name, actual_value)
  61. module_instance.display.display_success(
  62. f"Set default: [cyan]{actual_var_name}[/cyan] = [yellow]{actual_value}[/yellow]"
  63. )
  64. module_instance.display.display_info(
  65. "[dim]This will be used as the default value when generating templates with this module.[/dim]"
  66. )
  67. def config_remove(module_instance, var_name: str) -> None:
  68. """Remove a specific default variable value."""
  69. config = ConfigManager()
  70. defaults = config.get_defaults(module_instance.name)
  71. if not defaults:
  72. module_instance.display.display_warning(
  73. f"No defaults configured for module '{module_instance.name}'"
  74. )
  75. return
  76. if var_name in defaults:
  77. del defaults[var_name]
  78. config.set_defaults(module_instance.name, defaults)
  79. module_instance.display.display_success(f"Removed default for '{var_name}'")
  80. else:
  81. module_instance.display.display_error(
  82. f"No default found for variable '{var_name}'"
  83. )
  84. def config_clear(
  85. module_instance, var_name: str | None = None, force: bool = False
  86. ) -> None:
  87. """Clear default value(s) for this module."""
  88. config = ConfigManager()
  89. defaults = config.get_defaults(module_instance.name)
  90. if not defaults:
  91. module_instance.display.display_warning(
  92. f"No defaults configured for module '{module_instance.name}'"
  93. )
  94. return
  95. if var_name:
  96. # Clear specific variable
  97. if var_name in defaults:
  98. del defaults[var_name]
  99. config.set_defaults(module_instance.name, defaults)
  100. module_instance.display.display_success(f"Cleared default for '{var_name}'")
  101. else:
  102. module_instance.display.display_error(
  103. f"No default found for variable '{var_name}'"
  104. )
  105. else:
  106. # Clear all defaults
  107. if not force:
  108. detail_lines = [
  109. f"This will clear ALL defaults for module '{module_instance.name}':",
  110. "",
  111. ]
  112. for clear_var_name, var_value in defaults.items():
  113. detail_lines.append(
  114. f" [green]{clear_var_name}[/green] = [yellow]{var_value}[/yellow]"
  115. )
  116. module_instance.display.display_warning(
  117. "Warning: This will clear ALL defaults"
  118. )
  119. module_instance.display.display_info("")
  120. for line in detail_lines:
  121. module_instance.display.display_info(line)
  122. module_instance.display.display_info("")
  123. if not Confirm.ask("[bold red]Are you sure?[/bold red]", default=False):
  124. module_instance.display.display_info(
  125. "[green]Operation cancelled.[/green]"
  126. )
  127. return
  128. config.clear_defaults(module_instance.name)
  129. module_instance.display.display_success(
  130. f"Cleared all defaults for module '{module_instance.name}'"
  131. )
  132. def config_list(module_instance) -> None:
  133. """Display the defaults for this specific module as a table."""
  134. config = ConfigManager()
  135. # Get only the defaults for this module
  136. defaults = config.get_defaults(module_instance.name)
  137. if not defaults:
  138. module_instance.display.display_warning(
  139. f"No defaults configured for module '{module_instance.name}'"
  140. )
  141. return
  142. # Display defaults using DisplayManager
  143. module_instance.display.display_info(
  144. f"[bold]Defaults for module '{module_instance.name}':[/bold]\n"
  145. )
  146. # Convert defaults to display format (key: value pairs)
  147. items = {f"{var_name}:": str(var_value) for var_name, var_value in defaults.items()}
  148. module_instance.display.display_summary_table("", items)