Configuration override from environment variable (#47)
* Add environment variable override for config fields Introduces functions to override configuration fields from environment variables, allowing dynamic configuration without modifying YAML files. The environment variable names are generated from field names, and type conversion is handled for int, float, and tuple fields. * update chart version to 0.1.4 * Update README.md to enhance environment variable configuration details and improve overall clarity
This commit is contained in:
committed by
GitHub
parent
e1444e44ee
commit
223883a781
@@ -111,13 +111,40 @@ class Config:
|
||||
attack_urls_threshold=analyzer.get('attack_urls_threshold', 1)
|
||||
)
|
||||
|
||||
def __get_env_from_config(config: str) -> str:
|
||||
|
||||
env = config.upper().replace('.', '_').replace('-', '__').replace(' ', '_')
|
||||
|
||||
return f'KRAWL_{env}'
|
||||
|
||||
def override_config_from_env(config: Config = None):
|
||||
"""Initialize configuration from environment variables"""
|
||||
|
||||
for field in config.__dataclass_fields__:
|
||||
|
||||
env_var = __get_env_from_config(field)
|
||||
if env_var in os.environ:
|
||||
field_type = config.__dataclass_fields__[field].type
|
||||
env_value = os.environ[env_var]
|
||||
if field_type == int:
|
||||
setattr(config, field, int(env_value))
|
||||
elif field_type == float:
|
||||
setattr(config, field, float(env_value))
|
||||
elif field_type == Tuple[int, int]:
|
||||
parts = env_value.split(',')
|
||||
if len(parts) == 2:
|
||||
setattr(config, field, (int(parts[0]), int(parts[1])))
|
||||
else:
|
||||
setattr(config, field, env_value)
|
||||
|
||||
_config_instance = None
|
||||
|
||||
|
||||
def get_config() -> Config:
|
||||
"""Get the singleton Config instance"""
|
||||
global _config_instance
|
||||
if _config_instance is None:
|
||||
_config_instance = Config.from_yaml()
|
||||
return _config_instance
|
||||
|
||||
override_config_from_env(_config_instance)
|
||||
|
||||
return _config_instance
|
||||
Reference in New Issue
Block a user