From 401e702a9ff14bf4cc33b3ed3acf16f3c60c6945 Mon Sep 17 00:00:00 2001 From: Jeremy Cline Date: Tue, 14 Apr 2020 15:27:51 -0400 Subject: [PATCH] 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. --- docs/cli.rst | 5 ++++- gitlab/config.py | 12 +++++++++++- gitlab/tests/test_config.py | 11 +++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/docs/cli.rst b/docs/cli.rst index b5c8e52c9..aeff2766d 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -14,7 +14,10 @@ Configuration Files ----- -``gitlab`` looks up 2 configuration files by default: +``gitlab`` looks up 3 configuration files by default: + +``PYTHON_GITLAB_CFG`` environment variable + An environment variable that contains the path to a configuration file ``/etc/python-gitlab.cfg`` System-wide configuration file diff --git a/gitlab/config.py b/gitlab/config.py index 1b665ed66..fa2593bce 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 65bd30053..681b3d174 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 @@ """ +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):