From ee15221e7c58fa7129214135553c2b39540e8856 Mon Sep 17 00:00:00 2001 From: Lars Kellogg-Stedman Date: Sun, 5 Jun 2022 01:50:42 -0400 Subject: [PATCH] feat: return False when we do not discover any environment variables (#388) * Fix docstring for load_dotenv The docstring for load_dotenv was missing a word, rendering it confusing. This commits modifies it for clarity. * Return False when we do not discover any environment variables This modifies Dotenv.set_as_environment_variables to return False if we have not discovered any environment variables via either `dotenv_path` or `stream`. The return value gets passed through to `load_dotenv`, so this can be used to determine if `dotenv.load_dotenv` was able to set anything. Closes #321 Co-authored-by: Saurabh Kumar --- src/dotenv/main.py | 5 +++++ tests/test_main.py | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/dotenv/main.py b/src/dotenv/main.py index e7ad4308..78410660 100644 --- a/src/dotenv/main.py +++ b/src/dotenv/main.py @@ -87,6 +87,9 @@ def set_as_environment_variables(self) -> bool: """ Load the current dotenv as system environment variable. """ + if not self.dict(): + return False + for k, v in self.dict().items(): if k in os.environ and not self.override: continue @@ -324,6 +327,8 @@ def load_dotenv( override: Whether to override the system environment variables with the variables from the `.env` file. encoding: Encoding to be used to read the file. + Returns: + Bool: True if atleast one environment variable is set elese False If both `dotenv_path` and `stream` are `None`, `find_dotenv()` is used to find the .env file. diff --git a/tests/test_main.py b/tests/test_main.py index ca14b1ac..82c73ba1 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -259,8 +259,9 @@ def test_load_dotenv_no_file_verbose(): logger = logging.getLogger("dotenv.main") with mock.patch.object(logger, "info") as mock_info: - dotenv.load_dotenv('.does_not_exist', verbose=True) + result = dotenv.load_dotenv('.does_not_exist', verbose=True) + assert result is False mock_info.assert_called_once_with("Python-dotenv could not find configuration file %s.", ".does_not_exist")