@@ -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
94107class AbstractPackager :
95108 def __init__ (self , appdir : AppDir , meta_info : AbstractMetaInfo , context : Context ):
0 commit comments