"""
Configuration module
"""
import logging
from pathlib import Path
import yaml
LOGGER = logging.getLogger(__name__)
[docs]class Config():
"""
Manage configuration file
:param filename: File path of configuration
:type filename: str
"""
def __init__(self, filename):
"""
Class constructor
"""
self._filename = filename
try:
config = self._load_config()
except FileNotFoundError:
config = None
self.config = config
[docs] def _load_config(self):
"""
Load and parse YAML configuration
:return: Configuration dictionary
:rtype: dict or NoneType
"""
with open(self._filename, 'r') as file:
return yaml.safe_load(file)
[docs] def dump_config(self, to_file=False):
"""
Dump configuration in YAML format
:param to_file: Dump to file
:type to_file: bool, optional
:return: YAML configuration
:rtype: str
"""
if to_file:
Path(self._filename
).parent.mkdir(mode=0o700, parents=True, exist_ok=True)
with open(self._filename, 'w') as file:
yaml_config = yaml.dump(
self.config, file, default_flow_style=False
)
self.config = self._load_config()
else:
yaml_config = yaml.dump(self.config, default_flow_style=False)
return yaml_config
[docs] def clear_config(self):
"""
Clear configuration file
"""
open(self._filename, 'w').close()
self.config = self._load_config()
[docs] def get_variable(self, variable):
"""
Get variable value from configuration
:param variable: Variable to get the value
:type variable: str
:return: Value of variable
:rtype: str or bool or NoneType
"""
if self.config:
return self.config.get(variable)
return None
[docs] def set_variable(self, variable, value):
"""
Set variable value in configuration
:param variable: Variable to set the value
:type variable: str
:param value: Value of variable
:type value: str or bool or NoneType
"""
if not self.config:
self.config = {}
if value:
self.config[variable] = value
else:
self.config.pop(variable, None)
self.dump_config(to_file=True)