From 84cbfc0698f429c93450cd6f1600e56b41a30247 Mon Sep 17 00:00:00 2001 From: Grey Li Date: Tue, 7 Apr 2020 21:46:53 +0800 Subject: [PATCH 1/2] Stop change CWD to .env/.flaskenv location --- src/flask/cli.py | 7 ------- tests/test_cli.py | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/flask/cli.py b/src/flask/cli.py index fd9baa67..caf0dfea 100644 --- a/src/flask/cli.py +++ b/src/flask/cli.py @@ -610,10 +610,6 @@ def load_dotenv(path=None): If an env var is already set it is not overwritten, so earlier files in the list are preferred over later files. - Changes the current working directory to the location of the first file - found, with the assumption that it is in the top level project directory - and will be where the Python path should import local packages from. - This is a no-op if `python-dotenv`_ is not installed. .. _python-dotenv: https://github.com/theskumar/python-dotenv#readme @@ -659,9 +655,6 @@ def load_dotenv(path=None): dotenv.load_dotenv(path) - if new_dir and os.getcwd() != new_dir: - os.chdir(new_dir) - return new_dir is not None # at least one file was located and loaded diff --git a/tests/test_cli.py b/tests/test_cli.py index 635daabe..c1dc5ea5 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -504,7 +504,7 @@ def test_load_dotenv(monkeypatch): monkeypatch._setitem.append((os.environ, item, notset)) monkeypatch.setenv("EGGS", "3") - monkeypatch.chdir(os.path.join(test_path, "cliapp", "inner1")) + monkeypatch.chdir(test_path) assert load_dotenv() assert os.getcwd() == test_path # .flaskenv doesn't overwrite .env From e403e9ea970c875052c9199d35175e0a420bfed5 Mon Sep 17 00:00:00 2001 From: Grey Li Date: Tue, 14 Apr 2020 11:31:00 +0800 Subject: [PATCH 2/2] Update changelog for load dotenv behaivour change --- CHANGES.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 424fe876..050acc6c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -27,6 +27,9 @@ Unreleased instead of PyOpenSSL. :pr:`3492` - When specifying a factory function with ``FLASK_APP``, keyword argument can be passed. :issue:`3553` +- When loading a ``.env`` or ``.flaskenv`` file on top level directory, + Flask will not change current work directory to the location of dotenv + files, in order to prevent potential confusion. :pr:`3560` Version 1.1.2