From 33145c36991c503aeb1e5870c27b720ec80d5079 Mon Sep 17 00:00:00 2001 From: Grey Li Date: Wed, 10 Mar 2021 21:40:29 +0800 Subject: [PATCH] Set default encoding to UTF-8 for load_dotenv --- src/flask/cli.py | 7 +++++-- tests/test_apps/.env | 1 + tests/test_cli.py | 5 +++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/flask/cli.py b/src/flask/cli.py index 48c73763..c7b88135 100644 --- a/src/flask/cli.py +++ b/src/flask/cli.py @@ -619,6 +619,9 @@ def load_dotenv(path=None): Returns ``False`` when python-dotenv is not installed, or when the given path isn't a file. + .. versionchanged:: 2.0 + When loading the env files, set the default encoding to UTF-8. + .. versionadded:: 1.0 """ if dotenv is None: @@ -636,7 +639,7 @@ def load_dotenv(path=None): # else False if path is not None: if os.path.isfile(path): - return dotenv.load_dotenv(path) + return dotenv.load_dotenv(path, encoding="utf-8") return False @@ -651,7 +654,7 @@ def load_dotenv(path=None): if new_dir is None: new_dir = os.path.dirname(path) - dotenv.load_dotenv(path) + dotenv.load_dotenv(path, encoding="utf-8") return new_dir is not None # at least one file was located and loaded diff --git a/tests/test_apps/.env b/tests/test_apps/.env index 13ac3483..0890b615 100644 --- a/tests/test_apps/.env +++ b/tests/test_apps/.env @@ -1,3 +1,4 @@ FOO=env SPAM=1 EGGS=2 +HAM=火腿 diff --git a/tests/test_cli.py b/tests/test_cli.py index 5fb114a4..b85e16d7 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -505,7 +505,7 @@ need_dotenv = pytest.mark.skipif(dotenv is None, reason="dotenv is not installed @need_dotenv def test_load_dotenv(monkeypatch): # can't use monkeypatch.delitem since the keys don't exist yet - for item in ("FOO", "BAR", "SPAM"): + for item in ("FOO", "BAR", "SPAM", "HAM"): monkeypatch._setitem.append((os.environ, item, notset)) monkeypatch.setenv("EGGS", "3") @@ -520,7 +520,8 @@ def test_load_dotenv(monkeypatch): assert os.environ["SPAM"] == "1" # set manually, files don't overwrite assert os.environ["EGGS"] == "3" - + # test env file encoding + assert os.environ["HAM"] == "火腿" # Non existent file should not load assert not load_dotenv("non-existent-file")