Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions struct_module/commands/generate.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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):
Expand All @@ -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,
}
)

Expand Down Expand Up @@ -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']:
Expand All @@ -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}")
7 changes: 6 additions & 1 deletion struct_module/file_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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)
Expand Down
6 changes: 4 additions & 2 deletions struct_module/template_renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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='{%@',
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion tests/test_template_renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 @}}!"
Expand Down
Loading