85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
import re
|
|
import os
|
|
|
|
# Define template and output file paths
|
|
TEMPLATE_FILE = ".env.template"
|
|
OUTPUT_FILE = ".env"
|
|
|
|
def load_template(template_path):
|
|
"""
|
|
Load the .env.template file.
|
|
"""
|
|
if not os.path.exists(template_path):
|
|
raise FileNotFoundError(f"Template file '{template_path}' not found.")
|
|
|
|
with open(template_path, 'r') as file:
|
|
return file.readlines()
|
|
|
|
def parse_variable(line):
|
|
"""
|
|
Extract the variable name and default value from a template line.
|
|
"""
|
|
match = re.match(r"(.*?)\$\{([^}]+)\}(.*)", line)
|
|
if match:
|
|
prefix, var_value, suffix = match.groups()
|
|
|
|
# Extract variable name and default value (if any)
|
|
var_name, default_value = (var_value.split(":-") + [""])[:2]
|
|
return prefix, var_name, default_value, suffix
|
|
return None, None, None, None
|
|
|
|
def prompt_variable(var_name, default_value):
|
|
"""
|
|
Prompt the user to input a value for the variable, using a default if no input is provided.
|
|
"""
|
|
user_input = input(f"Enter value for {var_name} [default: {default_value}]: ").strip()
|
|
return user_input if user_input else default_value
|
|
|
|
def generate_env(template_lines):
|
|
"""
|
|
Generate the .env file content by substituting variables from the template.
|
|
"""
|
|
output_lines = ["# Generated .env file\n"]
|
|
for line in template_lines:
|
|
# Skip comments and empty lines
|
|
if line.strip().startswith("#") or not line.strip():
|
|
output_lines.append(line)
|
|
continue
|
|
|
|
# Parse and process variables
|
|
prefix, var_name, default_value, suffix = parse_variable(line)
|
|
if var_name:
|
|
# Get the default value from the template (already handled in the parsing)
|
|
value = prompt_variable(var_name, default_value)
|
|
output_lines.append(f"{prefix}{value}{suffix}\n")
|
|
else:
|
|
# Unprocessed line (e.g., no variables)
|
|
output_lines.append(line)
|
|
|
|
return output_lines
|
|
|
|
def write_env(output_path, lines):
|
|
"""
|
|
Write the generated .env file content to the output file.
|
|
"""
|
|
with open(output_path, 'w') as file:
|
|
file.writelines(lines)
|
|
print(f".env file has been successfully created at '{output_path}'.")
|
|
|
|
def main():
|
|
try:
|
|
# Load the template file
|
|
template_lines = load_template(TEMPLATE_FILE)
|
|
|
|
# Generate the .env content
|
|
output_lines = generate_env(template_lines)
|
|
|
|
# Write the content to the .env file
|
|
write_env(OUTPUT_FILE, output_lines)
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|