2024-03-02 01:24:43 +03:00

34 lines
865 B
Python

from abc import ABCMeta, abstractmethod
from typing import Type, Optional
import yaml
from kissconfig.config import ConfigClass
class EmptyConfig (ValueError):
pass
class Loader (metaclass=ABCMeta):
def __init__(self, namespace: Optional[str] = None):
self.namespace = namespace
@abstractmethod
def parse_file(self, path: str) -> dict:
pass
def from_file(self, config_class: Type[ConfigClass], path: str) -> ConfigClass:
data = self.parse_file(path)
if not data:
raise EmptyConfig("Configuration file seems to be empty")
if self.namespace is not None:
data = data.get(self.namespace, {})
return config_class.from_dict(data)
class YamlLoader (Loader):
def parse_file(self, path: str) -> dict:
with open(path) as f:
return yaml.safe_load(f)