Skip to content

Commit eb29271

Browse files
committed
Import environment variables to ease debugging
Replaces existing lazy loading approach.
1 parent 8d817c6 commit eb29271

1 file changed

Lines changed: 36 additions & 23 deletions

File tree

ldnp/abstractpackager.py

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,43 +53,56 @@ class AbstractMetaInfo(UserDict):
5353
def packager_prefix():
5454
raise NotImplementedError
5555

56+
def __init__(self):
57+
super().__init__()
58+
59+
# populate internal storage
60+
# we do not expect the environment variables to change during this program's runtime
61+
# populating the internal storage allows printing the variables, which in turn makes debugging a lot easier
62+
env_var_prefix = "LDNP_META_"
63+
packager_env_var_prefix = f"{env_var_prefix}{self.packager_prefix()}_"
64+
65+
name: str
66+
value: str
67+
for name, value in os.environ.items():
68+
if name.startswith(env_var_prefix):
69+
# specific packager env var always takes precedence
70+
if name.startswith(packager_env_var_prefix):
71+
fixed_name = name.removeprefix(packager_env_var_prefix)
72+
else:
73+
fixed_name = name.removeprefix(env_var_prefix)
74+
75+
self[fixed_name] = value
76+
5677
def __setitem__(self, key, value):
5778
# we treat all keys as case-insensitive and normalize them to uppercase
5879
self.data[key.upper()] = value
5980

6081
def __getitem__(self, identifier: str):
61-
"""
62-
Implements the "subscript" operator. Checks the environment for packager-specific and globally set meta info.
63-
64-
:param identifier: identifier suffix (see class description)
65-
:return: value for provided identifier (if available)
66-
:raises KeyError: if the requested value is unavailable
67-
"""
68-
6982
# identifiers are supposed to be case-insensitive within our code (we accept only upper-case env vars)
7083
identifier = identifier.upper()
7184

72-
prefix = "LDNP_META"
73-
74-
global_env_var = f"{prefix}_{identifier}"
75-
specific_env_var = f"{prefix}_{self.packager_prefix()}_{identifier.upper()}"
76-
7785
# just needed to be able to rewrite the error message
7886
try:
79-
try:
80-
return os.environ[specific_env_var]
81-
82-
except KeyError:
83-
try:
84-
return os.environ[global_env_var]
85-
86-
except KeyError:
87-
# the KeyError here should propagate to the caller if raised
88-
return self.data[identifier]
87+
return self.data[identifier]
8988

9089
except KeyError:
9190
raise KeyError(f"Could not find {identifier.upper()}")
9291

92+
# need to overwrite to force use of our __getitem__
93+
def get(self, key, default=None):
94+
try:
95+
return self[key]
96+
except KeyError:
97+
return default
98+
99+
# need to overwrite to force use of our __setitem__
100+
def setdefault(self, key, default=None):
101+
if key in self:
102+
pass
103+
104+
self[key] = default
105+
93106

94107
class AbstractPackager:
95108
def __init__(self, appdir: AppDir, meta_info: AbstractMetaInfo, context: Context):

0 commit comments

Comments
 (0)