| | import os |
| | import re |
| | import argparse |
| | import sys |
| |
|
| | """ |
| | This script updates environment variables in a .env file with values from the local environment. |
| | Specifically, it looks for variables set to "GET_FROM_LOCAL_ENV" in the input .env file and replaces them |
| | with the corresponding values from the local environment variables. |
| | |
| | Usage: |
| | 1. Prepare an input .env file with some variables set to "GET_FROM_LOCAL_ENV". |
| | Example input .env file (input.env): |
| | # Example configuration |
| | |
| | API_KEY=GET_FROM_LOCAL_ENV |
| | DB_PASSWORD=GET_FROM_LOCAL_ENV |
| | HOST=localhost |
| | PORT=3080 |
| | |
| | 2. Set the corresponding environment variables in your local environment. |
| | Example in bash: |
| | export API_KEY=new_api_key_value |
| | export DB_PASSWORD=new_db_password_value |
| | |
| | 3. Run the script, specifying the input and output file paths. |
| | Example: |
| | python update_env.py input.env output.env |
| | """ |
| |
|
| | def read_env_file(file_path): |
| | """Reads the .env file and returns the lines as a list.""" |
| | with open(file_path, 'r') as file: |
| | lines = file.readlines() |
| | return lines |
| |
|
| | def write_env_file(file_path, lines): |
| | """Writes the updated lines to the specified .env file.""" |
| | with open(file_path, 'w') as file: |
| | file.writelines(lines) |
| |
|
| | def update_env_file_with_local_env(input_file_path, output_file_path): |
| | """ |
| | Reads the input .env file, updates the variables set to GET_FROM_LOCAL_ENV |
| | with values from the local environment, and writes the result to the output .env file. |
| | """ |
| | lines = read_env_file(input_file_path) |
| | updated_lines = [] |
| | |
| | env_var_pattern = re.compile(r'^\s*([A-Z_]+)=GET_FROM_LOCAL_ENV\s*$') |
| | missing_vars = [] |
| | updated_vars = [] |
| |
|
| | for line in lines: |
| | match = env_var_pattern.match(line) |
| | if match: |
| | key = match.group(1) |
| | |
| | if key in os.environ: |
| | new_value = os.environ[key] |
| | updated_line = f'{key}={new_value}\n' |
| | updated_lines.append(updated_line) |
| | updated_vars.append(key) |
| | else: |
| | missing_vars.append(key) |
| | else: |
| | updated_lines.append(line) |
| |
|
| | |
| | if missing_vars: |
| | for var in missing_vars: |
| | print(f"Warning: {var} set to GET_FROM_LOCAL_ENV, could not find {var}, please set {var} in your local environment and run again.") |
| | sys.exit(1) |
| |
|
| | |
| | write_env_file(output_file_path, updated_lines) |
| |
|
| | |
| | if updated_vars: |
| | print("Updated the following variables:") |
| | for var in updated_vars: |
| | print(var) |
| | |
| | print(f"Processed {input_file_path} and wrote updates to {output_file_path}.") |
| |
|
| | if __name__ == "__main__": |
| | |
| | parser = argparse.ArgumentParser(description='Update .env file with local environment variables.') |
| | parser.add_argument('input_file_path', type=str, help='Path to the input .env file') |
| | parser.add_argument('output_file_path', type=str, help='Path to the output .env file') |
| | args = parser.parse_args() |
| |
|
| | |
| | update_env_file_with_local_env(args.input_file_path, args.output_file_path) |
| |
|