config_commands.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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(
  16. f"[green]{var_name}[/green] = [yellow]{value}[/yellow]"
  17. )
  18. else:
  19. module_instance.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.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.info(
  32. f" [green]{config_var_name}[/green] = [yellow]{var_value}[/yellow]"
  33. )
  34. else:
  35. module_instance.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.error(
  53. f"Missing value for variable '{var_name}'", context="config set"
  54. )
  55. module_instance.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.success(
  62. f"Set default: [cyan]{actual_var_name}[/cyan] = [yellow]{actual_value}[/yellow]"
  63. )
  64. module_instance.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.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.success(f"Removed default for '{var_name}'")
  80. else:
  81. module_instance.display.error(f"No default found for variable '{var_name}'")
  82. def config_clear(
  83. module_instance, var_name: str | None = None, force: bool = False
  84. ) -> None:
  85. """Clear default value(s) for this module."""
  86. config = ConfigManager()
  87. defaults = config.get_defaults(module_instance.name)
  88. if not defaults:
  89. module_instance.display.warning(
  90. f"No defaults configured for module '{module_instance.name}'"
  91. )
  92. return
  93. if var_name:
  94. # Clear specific variable
  95. if var_name in defaults:
  96. del defaults[var_name]
  97. config.set_defaults(module_instance.name, defaults)
  98. module_instance.display.success(f"Cleared default for '{var_name}'")
  99. else:
  100. module_instance.display.error(f"No default found for variable '{var_name}'")
  101. else:
  102. # Clear all defaults
  103. if not force:
  104. detail_lines = [
  105. f"This will clear ALL defaults for module '{module_instance.name}':",
  106. "",
  107. ]
  108. for clear_var_name, var_value in defaults.items():
  109. detail_lines.append(
  110. f" [green]{clear_var_name}[/green] = [yellow]{var_value}[/yellow]"
  111. )
  112. module_instance.display.warning("Warning: This will clear ALL defaults")
  113. module_instance.display.info("")
  114. for line in detail_lines:
  115. module_instance.display.info(line)
  116. module_instance.display.info("")
  117. input_mgr = InputManager()
  118. if not input_mgr.confirm("Are you sure?", default=False):
  119. module_instance.display.info("[green]Operation cancelled.[/green]")
  120. return
  121. config.clear_defaults(module_instance.name)
  122. module_instance.display.success(
  123. f"Cleared all defaults for module '{module_instance.name}'"
  124. )
  125. def config_list(module_instance) -> None:
  126. """Display the defaults for this specific module as a table."""
  127. config = ConfigManager()
  128. # Get only the defaults for this module
  129. defaults = config.get_defaults(module_instance.name)
  130. if not defaults:
  131. module_instance.display.warning(
  132. f"No defaults configured for module '{module_instance.name}'"
  133. )
  134. return
  135. # Display defaults using DisplayManager
  136. module_instance.display.info(
  137. f"[bold]Defaults for module '{module_instance.name}':[/bold]\n"
  138. )
  139. # Convert defaults to display format (rows for table)
  140. rows = [
  141. (f"{var_name}:", str(var_value)) for var_name, var_value in defaults.items()
  142. ]
  143. module_instance.display.table(
  144. headers=None, rows=rows, title="", show_header=False, borderless=True
  145. )