diff --git a/struct_module/commands/generate.py b/struct_module/commands/generate.py index 32103a6..66a7d74 100644 --- a/struct_module/commands/generate.py +++ b/struct_module/commands/generate.py @@ -19,6 +19,7 @@ def __init__(self, parser): parser.add_argument('-b', '--backup', type=str, help='Path to the backup folder') parser.add_argument('-f', '--file-strategy', type=str, choices=['overwrite', 'skip', 'append', 'rename', 'backup'], default='overwrite', help='Strategy for handling existing files').completer = file_strategy_completer parser.add_argument('-p', '--global-system-prompt', type=str, help='Global system prompt for OpenAI') + parser.add_argument('--non-interactive', action='store_true', help='Run the command in non-interactive mode') parser.set_defaults(func=self.execute) def execute(self, args): @@ -71,6 +72,7 @@ def _create_structure(self, args): content["global_system_prompt"] = args.global_system_prompt content["config_variables"] = config_variables content["input_store"] = args.input_store + content["non_interactive"] = args.non_interactive file_item = FileItem(content) file_item.fetch_content() elif isinstance(content, str): @@ -80,6 +82,7 @@ def _create_structure(self, args): "content": content, "config_variables": config_variables, "input_store": args.input_store, + "non_interactive": args.non_interactive, } ) @@ -131,6 +134,7 @@ def _create_structure(self, args): 'file_strategy': args.file_strategy, 'global_system_prompt': args.global_system_prompt, 'input_store': args.input_store, + 'non_interactive': args.non_interactive, }) elif isinstance(content['struct'], list): for struct in content['struct']: @@ -144,6 +148,7 @@ def _create_structure(self, args): 'file_strategy': args.file_strategy, 'global_system_prompt': args.global_system_prompt, 'input_store': args.input_store, + 'non_interactive': args.non_interactive, }) else: self.logger.warning(f"Unsupported content in folder: {folder}") diff --git a/struct_module/file_item.py b/struct_module/file_item.py index fc0c4ea..d6106c4 100644 --- a/struct_module/file_item.py +++ b/struct_module/file_item.py @@ -24,6 +24,7 @@ def __init__(self, properties): self.content_location = properties.get("file") self.permissions = properties.get("permissions") self.input_store = properties.get("input_store") + self.non_interactive = properties.get("non_interactive") self.skip = properties.get("skip", False) self.skip_if_exists = properties.get("skip_if_exists", False) @@ -36,7 +37,11 @@ def __init__(self, properties): if openai_api_key: self._configure_openai() - self.template_renderer = TemplateRenderer(self.config_variables, self.input_store) + self.template_renderer = TemplateRenderer( + self.config_variables, + self.input_store, + self.non_interactive + ) def _configure_openai(self): self.openai_client = OpenAI(api_key=openai_api_key) diff --git a/struct_module/template_renderer.py b/struct_module/template_renderer.py index 41e7f36..6495cba 100644 --- a/struct_module/template_renderer.py +++ b/struct_module/template_renderer.py @@ -8,8 +8,10 @@ from struct_module.utils import get_current_repo class TemplateRenderer: - def __init__(self, config_variables, input_store): + def __init__(self, config_variables, input_store, non_interactive): self.config_variables = config_variables + self.non_interactive = non_interactive + self.env = Environment( trim_blocks=True, block_start_string='{%@', @@ -80,7 +82,7 @@ def prompt_for_missing_vars(self, content, vars): for var in undeclared_variables: if var not in vars: default = self.input_data.get(var, default_values.get(var, "")) - if not sys.stdin.isatty(): + if self.non_interactive: user_input = default if default else "NEEDS_TO_BE_SET" else: user_input = input(f"Enter value for {var} [{default}]: ") or default diff --git a/tests/test_template_renderer.py b/tests/test_template_renderer.py index 81b9394..0d1c03b 100644 --- a/tests/test_template_renderer.py +++ b/tests/test_template_renderer.py @@ -10,7 +10,7 @@ def renderer(): ] input_store = "/tmp/input.json" non_interactive = False - return TemplateRenderer(config_variables, input_store) + return TemplateRenderer(config_variables, input_store, non_interactive) def test_render_template(renderer): content = "Hello, {{@ var1 @}}!"