From 401e702a9ff14bf4cc33b3ed3acf16f3c60c6945 Mon Sep 17 00:00:00 2001 From: Jeremy Cline Date: Tue, 14 Apr 2020 15:27:51 -0400 Subject: feat: allow an environment variable to specify config location It can be useful (especially in scripts) to specify a configuration location via an environment variable. If the "PYTHON_GITLAB_CFG" environment variable is defined, treat its value as the path to a configuration file and include it in the set of default configuration locations. --- gitlab/config.py | 12 +++++++++++- gitlab/tests/test_config.py | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) (limited to 'gitlab') diff --git a/gitlab/config.py b/gitlab/config.py index 1b665ed..fa2593b 100644 --- a/gitlab/config.py +++ b/gitlab/config.py @@ -18,7 +18,17 @@ import os import configparser -_DEFAULT_FILES = ["/etc/python-gitlab.cfg", os.path.expanduser("~/.python-gitlab.cfg")] + +def _env_config(): + if "PYTHON_GITLAB_CFG" in os.environ: + return [os.environ["PYTHON_GITLAB_CFG"]] + return [] + + +_DEFAULT_FILES = _env_config() + [ + "/etc/python-gitlab.cfg", + os.path.expanduser("~/.python-gitlab.cfg"), +] class ConfigError(Exception): diff --git a/gitlab/tests/test_config.py b/gitlab/tests/test_config.py index 65bd300..681b3d1 100644 --- a/gitlab/tests/test_config.py +++ b/gitlab/tests/test_config.py @@ -15,6 +15,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . +import os import unittest import mock @@ -72,6 +73,16 @@ per_page = 200 """ +class TestEnvConfig(unittest.TestCase): + def test_env_present(self): + with mock.patch.dict(os.environ, {"PYTHON_GITLAB_CFG": "/some/path"}): + self.assertEqual(["/some/path"], config._env_config()) + + def test_env_missing(self): + with mock.patch.dict(os.environ, {}, clear=True): + self.assertEqual([], config._env_config()) + + class TestConfigParser(unittest.TestCase): @mock.patch("os.path.exists") def test_missing_config(self, path_exists): -- cgit v1.2.1