From bc3c483388852895a4df17ba4a4b5edcafd284ad Mon Sep 17 00:00:00 2001 From: "Gabriele N. Tornetta" Date: Mon, 11 Jul 2022 15:34:03 +0100 Subject: [PATCH] fix: handle empty prefix in subconfig correctly (#13) This change ensures that sub-configurations with an empty prefix don't end up looking for environment variables with a double underscore as separator. --- envier/env.py | 2 +- tests/test_env.py | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/envier/env.py b/envier/env.py index 47cec16..e37d2f3 100644 --- a/envier/env.py +++ b/envier/env.py @@ -218,7 +218,7 @@ def __init__(self, source=None, parent=None): ) + _normalized( self.__prefix__ ) # type: str - if self._full_prefix: + if self._full_prefix and not self._full_prefix.endswith("_"): self._full_prefix += "_" self.spec = self.__class__ diff --git a/tests/test_env.py b/tests/test_env.py index bf03a66..1e77a73 100644 --- a/tests/test_env.py +++ b/tests/test_env.py @@ -140,11 +140,14 @@ class Config(Env): assert Config().foo == 24 -def test_env_nested_config(monkeypatch): - monkeypatch.setenv("MYAPP_SERVICE_PORT", "8080") +@pytest.mark.parametrize( + "prefix,var", [("", "MYAPP_PORT"), ("service", "MYAPP_SERVICE_PORT")] +) +def test_env_nested_config(monkeypatch, prefix, var): + monkeypatch.setenv(var, "8080") class ServiceConfig(Env): - __prefix__ = "service" + __prefix__ = prefix host = Env.var(str, "host", default="localhost") port = Env.var(int, "port", default=3000)