Implemented config functionality

Signed-off-by: Jim Martens <github@2martens.de>
This commit is contained in:
2019-07-04 15:36:29 +02:00
parent f32ff0b9f0
commit bf7f36174f

View File

@ -18,26 +18,95 @@
"""
Takes care of config functionality.
Constants:
CONFIG_FILE: name of config file relative to working directory
Functions:
get_property(key: str): returns the value of given property
get_property(key: str): returns the value of given property (e.g. "section.option")
set_property(key: str, value: str): sets the given property to given value
list_property_values(): prints out list of config values
get_config(): returns key-value store
"""
from typing import Union, Dict
import configparser
import os
CONFIG_FILE = "tm-masterthesis-config.ini"
_CONFIG_PROPS = {
"Paths": {
"coco": (str, ""),
"scenenet": (str, ""),
"scenenet_gt_train": (str, ""),
"scenenet_gt_val": (str, ""),
"scenenet_gt_test": (str, ""),
"output": (str, ""),
"summaries": (str, ""),
"weights": (str, "")
},
"Debug": {
"summaries": (bool, True),
"train_images": (bool, False)
}
}
def get_property(key: str) -> str:
raise NotImplementedError
parser = configparser.ConfigParser()
config_file = f"{os.getcwd()}/{CONFIG_FILE}"
_initialise_config(config_file)
parser.read(config_file)
section, prop = tuple(key.split("."))
return str(parser.get(section, prop))
def set_property(key: str, value: str) -> None:
raise NotImplementedError
parser = configparser.ConfigParser()
config_file = f"{os.getcwd()}/{CONFIG_FILE}"
_initialise_config(config_file)
parser.read(config_file)
section, prop = tuple(key.split("."))
cast_method = _CONFIG_PROPS[section][key][0]
parser.set(section, prop, cast_method(value))
def list_property_values() -> None:
raise NotImplementedError
parser = configparser.ConfigParser()
config_file = f"{os.getcwd()}/{CONFIG_FILE}"
_initialise_config(config_file)
parser.read(config_file)
print(parser) # simple implementation, more sophisticated might follow
def get_config() -> Dict[str, Union[str, int, float, bool]]:
raise NotImplementedError
def get_config() -> configparser.ConfigParser:
parser = configparser.ConfigParser()
config_file = f"{os.getcwd()}/{CONFIG_FILE}"
_initialise_config(config_file)
parser.read(config_file)
return parser
def _initialise_config(config_file: str) -> None:
# work-around for implementation detail of config parser
# a non-existing file does not lead to an exception but is simply ignored
# therefore a manual check via this construction is required
try:
with open(config_file, "r"):
pass
except FileNotFoundError:
with open(config_file, "w") as file:
parser = configparser.ConfigParser()
for section in _CONFIG_PROPS:
parser[section] = {}
for option in _CONFIG_PROPS[section]:
_, default = _CONFIG_PROPS[section][option]
parser[section][option] = default
parser.write(file)