mirror of
https://github.com/ManiMatter/decluttarr.git
synced 2026-04-25 10:15:44 +02:00
Split config file
This commit is contained in:
79
config/parser.py
Normal file
79
config/parser.py
Normal file
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python
|
||||
import sys
|
||||
import os
|
||||
import configparser
|
||||
import json
|
||||
from config.env_vars import *
|
||||
|
||||
# Configures how to parse configuration file
|
||||
config_file_name = 'config.conf'
|
||||
config_file_full_path = os.path.join(os.path.abspath(os.path.dirname(__file__)), config_file_name)
|
||||
sys.tracebacklimit = 0 # dont show stack traces in prod mode
|
||||
config = configparser.ConfigParser()
|
||||
config.optionxform = str # maintain capitalization of config keys
|
||||
config.read(config_file_full_path)
|
||||
|
||||
|
||||
def config_section_map(section):
|
||||
'Load the config file into a dictionary'
|
||||
dict1 = {}
|
||||
options = config.options(section)
|
||||
for option in options:
|
||||
try:
|
||||
dict1[option] = config.get(section, option)
|
||||
except:
|
||||
print("exception on %s!" % option)
|
||||
dict1[option] = None
|
||||
return dict1
|
||||
|
||||
def cast(value, type_):
|
||||
return type_(value)
|
||||
|
||||
def get_config_value(key, config_section, is_mandatory, datatype, default_value = None):
|
||||
'Return for each key the corresponding value from the Docker Environment or the Config File'
|
||||
if IS_IN_DOCKER:
|
||||
config_value = os.environ.get(key)
|
||||
if config_value is not None:
|
||||
# print(f'The value retrieved for [{config_section}]: {key} is "{config_value}"')
|
||||
config_value = config_value
|
||||
# return config_value
|
||||
elif is_mandatory:
|
||||
print(f'[ ERROR ]: Variable not specified in Docker environment: {key}' )
|
||||
sys.exit(0)
|
||||
else:
|
||||
# return default_value
|
||||
# print(f'The default value used for [{config_section}]: {key} is "{default_value}" (data type: {type(default_value).__name__})')
|
||||
config_value = default_value
|
||||
|
||||
else:
|
||||
try:
|
||||
config_value = config_section_map(config_section).get(key)
|
||||
except configparser.NoSectionError:
|
||||
config_value = None
|
||||
if config_value is not None:
|
||||
# print(f'The value retrieved for [{config_section}]: {key} is "{config_value}"')
|
||||
config_value = config_value
|
||||
# return config_value
|
||||
elif is_mandatory:
|
||||
print(f'[ ERROR ]: Mandatory variable not specified in config file, section [{config_section}]: {key} (data type: {datatype.__name__})')
|
||||
sys.exit(0)
|
||||
else:
|
||||
# return default_value
|
||||
# print(f'The default value used for [{config_section}]: {key} is "{default_value}" (data type: {type(default_value).__name__})')
|
||||
config_value = default_value
|
||||
|
||||
# Apply data type
|
||||
try:
|
||||
if datatype == bool:
|
||||
config_value = eval(str(config_value).capitalize())
|
||||
elif datatype == list:
|
||||
config_value = json.loads(config_value)
|
||||
elif config_value is not None:
|
||||
config_value = cast(config_value, datatype)
|
||||
except Exception as e:
|
||||
print(f'[ ERROR ]: The value retrieved for [{config_section}]: {key} is "{config_value}" and cannot be converted to data type {datatype}')
|
||||
print(e)
|
||||
sys.exit(0)
|
||||
return config_value
|
||||
|
||||
|
||||
Reference in New Issue
Block a user