import configparser
from typing import Type
from yacmmal.load.base import Loader
from pydantic import BaseModel
[docs]class CONFLoader(Loader):
"""
Loader for CONF files.
Attributes
----------
base_path : str
The base path of the config files.
"""
def __init__(self, base_path: str):
super(CONFLoader, self).__init__(base_path=base_path)
self.format = "conf"
[docs] def load(self, path: str, dclass: Type[BaseModel]) -> BaseModel:
"""
Loads a TOML file as a dataclass.
Parameters
----------
path : str
The path to the CONF file.
dclass : Type[BaseModel]
The dataclass to load the CONF file as.
Returns
-------
BaseModel
The loaded dataclass.
"""
config = configparser.ConfigParser()
config.read(path)
data = {section: dict(config[section]) for section in config.sections()}
return dclass.parse_obj(data)
[docs]class INILoader(CONFLoader):
"""
Loader for INI files.
Attributes
----------
base_path : str
The base path of the config files.
"""
def __init__(self, base_path: str):
super(INILoader, self).__init__(base_path=base_path)
self.format = "ini"
[docs] def load(self, path: str, dclass: Type[BaseModel]) -> BaseModel:
"""
Loads a INI file as a dataclass.
Parameters
----------
path : str
The path to the INI file.
dclass : Type[BaseModel]
The dataclass to load the INI file as.
"""
return super(INILoader, self).load(path=path, dclass=dclass)