From 46374fb07ad27e1f63c21c6132895486ef1351c8 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sat, 6 Jul 2024 21:59:20 -0300 Subject: [PATCH] Load .env from home, git, cwd, cmd line arg --- aider/main.py | 22 +++++++++++++++++++--- aider/website/_includes/special-keys.md | 2 +- aider/website/docs/config/aider_conf.md | 6 +++--- aider/website/docs/config/dotenv.md | 11 ++++++++--- aider/website/docs/install/optional.md | 2 +- 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/aider/main.py b/aider/main.py index 0c7ac4508..7733d031d 100644 --- a/aider/main.py +++ b/aider/main.py @@ -220,9 +220,9 @@ def generate_search_path_list(default_fname, git_root, command_line_file): files.append(Path.home() / default_file) # homedir if git_root: files.append(Path(git_root) / default_file) # git root + files.append(default_file.resolve()) if command_line_file: files.append(command_line_file) - files.append(default_file.resolve()) files = [Path(fn).resolve() for fn in files] files.reverse() uniq = [] @@ -255,6 +255,20 @@ def register_models(git_root, model_settings_fname, io): return None +def load_dotenv_files(git_root, dotenv_fname): + dotenv_files = generate_search_path_list( + ".env", + git_root, + dotenv_fname, + ) + loaded = [] + for fname in dotenv_files: + if Path(fname).exists(): + loaded.append(fname) + load_dotenv(fname) + return loaded + + def register_litellm_models(git_root, model_metadata_fname, io): model_metatdata_files = generate_search_path_list( ".aider.model.metadata.json", git_root, model_metadata_fname @@ -294,8 +308,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F args, unknown = parser.parse_known_args(argv) # Load the .env file specified in the arguments - if hasattr(args, "env_file"): - load_dotenv(args.env_file) + loaded_dotenvs = load_dotenv_files(git_root, args.env_file) # Parse again to include any arguments that might have been defined in .env args = parser.parse_args(argv) @@ -342,6 +355,9 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F editingmode=editing_mode, ) + for fname in loaded_dotenvs: + io.tool_output(f"Loaded {fname}") + fnames = [str(Path(fn).resolve()) for fn in args.files] if len(args.files) > 1: good = True diff --git a/aider/website/_includes/special-keys.md b/aider/website/_includes/special-keys.md index 0991b2bb3..7b0495685 100644 --- a/aider/website/_includes/special-keys.md +++ b/aider/website/_includes/special-keys.md @@ -6,4 +6,4 @@ have their keys and settings specified in environment variables. This can be done in your shell, or by using a -[`.env` file](/docs/config/dotenv.html). +[.env file](/docs/config/dotenv.html). diff --git a/aider/website/docs/config/aider_conf.md b/aider/website/docs/config/aider_conf.md index 6a6799ab8..25561a5a0 100644 --- a/aider/website/docs/config/aider_conf.md +++ b/aider/website/docs/config/aider_conf.md @@ -12,12 +12,12 @@ your git repo. {% include special-keys.md %} -Below is a sample of the file, which you +{% include env-keys-tip.md %} + +Below is a sample of the YAML config file, which you can also [download from GitHub](https://github.com/paul-gauthier/aider/blob/main/aider/website/assets/sample.aider.conf.yml). -{% include env-keys-tip.md %} -