Skip to content

Commit 73e7230

Browse files
authored
Merge pull request #1900 from sopel-irc/env-SOPEL_CONFIG_DIR
cli: support `SOPEL_CONFIG_DIR` envvar to override `--config-dir` default
2 parents 64b8cdf + e3e792b commit 73e7230

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

sopel/cli/utils.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,14 @@ def add_common_arguments(parser):
291291
"""))
292292
parser.add_argument(
293293
'--config-dir',
294-
default=config.DEFAULT_HOMEDIR,
294+
default=os.environ.get('SOPEL_CONFIG_DIR') or config.DEFAULT_HOMEDIR,
295295
dest='configdir',
296-
help='Look for configuration files in this directory.')
296+
help=inspect.cleandoc("""
297+
Look for configuration files in this directory.
298+
By default, Sopel will search in ``~/.sopel``.
299+
When the ``SOPEL_CONFIG_DIR`` environment variable is set and not
300+
empty, it is used as the default value.
301+
"""))
297302

298303

299304
def load_settings(options):

test/cli/test_cli_utils.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ def config_dir(tmpdir):
5151
return test_dir
5252

5353

54+
@pytest.fixture
55+
def env_dir(tmpdir):
56+
"""Pytest fixture used to generate an extra (external) config directory"""
57+
test_dir = tmpdir.mkdir("fromenv")
58+
test_dir.join('fromenv.cfg').write('')
59+
60+
return test_dir
61+
62+
5463
def test_green():
5564
assert green('hello') == '\x1b[32mhello\x1b[0m'
5665
assert green('hello', reset=False) == '\x1b[32mhello'
@@ -232,8 +241,9 @@ def test_load_settings(config_dir):
232241
assert settings.basename == 'config'
233242

234243

235-
def test_load_settings_arg_priority_over_env(monkeypatch, config_dir):
244+
def test_load_settings_arg_priority_over_env(monkeypatch, config_dir, env_dir):
236245
monkeypatch.setenv('SOPEL_CONFIG', 'fromenv')
246+
monkeypatch.setenv('SOPEL_CONFIG_DIR', env_dir.strpath)
237247

238248
config_dir.join('fromenv.cfg').write(TMP_CONFIG)
239249
config_dir.join('fromarg.cfg').write(TMP_CONFIG)
@@ -248,6 +258,7 @@ def test_load_settings_arg_priority_over_env(monkeypatch, config_dir):
248258
settings = load_settings(options)
249259
assert isinstance(settings, config.Config)
250260
assert settings.basename == 'fromarg'
261+
assert os.path.dirname(settings.filename) == config_dir.strpath
251262

252263

253264
def test_load_settings_default(config_dir):
@@ -261,18 +272,21 @@ def test_load_settings_default(config_dir):
261272
assert isinstance(settings, config.Config)
262273

263274

264-
def test_load_settings_default_env_var(monkeypatch, config_dir):
265-
monkeypatch.setenv('SOPEL_CONFIG', 'config')
275+
def test_load_settings_default_env_var(monkeypatch, config_dir, env_dir):
276+
monkeypatch.setenv('SOPEL_CONFIG', 'fromenv')
277+
monkeypatch.setenv('SOPEL_CONFIG_DIR', env_dir.strpath)
266278

267279
config_dir.join('config.cfg').write(TMP_CONFIG)
280+
env_dir.join('fromenv.cfg').write(TMP_CONFIG)
268281
parser = argparse.ArgumentParser()
269282
add_common_arguments(parser)
270283

271-
options = parser.parse_args(['--config-dir', config_dir.strpath])
284+
options = parser.parse_args([])
272285

273286
settings = load_settings(options)
274287
assert isinstance(settings, config.Config)
275-
assert settings.basename == 'config'
288+
assert settings.basename == 'fromenv'
289+
assert os.path.dirname(settings.filename) == env_dir.strpath
276290

277291

278292
def test_load_settings_default_not_found(config_dir):

0 commit comments

Comments
 (0)