diff --git a/src/confthing/confthing.py b/src/confthing/confthing.py deleted file mode 100644 index a68ea3b..0000000 --- a/src/confthing/confthing.py +++ /dev/null @@ -1,69 +0,0 @@ -import yaml - -class PathError(Exception): - def __init__(self, path): - self.path = path - super().__init__(self.path) - -class PathNotFoundError(PathError): - pass - -class MissingRequirementError(PathError): - pass - -class NotDictError(PathError): - pass - -class Config: - def __init__(self, data, delimiter = "/", defaults = {}, requirements = [], **misc_options): - self.data = yaml.safe_load(open(data)) if type(data) != dict else data - self.delimiter = delimiter - self.strict_subscript = misc_options.get("strict_subscript", False) - self.clobber_subscript = misc_options.get("clobber_subscript", False) - - for r in requirements: - if not self.get(r): raise MissingRequirementError(r) - for d in defaults: - if not self.get(d): self.set(d, defaults[d]) - - def split_path(self, path): - return path.split(self.delimiter) - - def get(self, path, fallback = None, strict = False): - elementsAll = self.split_path(path) - - def g(elems = elementsAll, obj = self.data): - if not elems or not elems[0] or type(obj) != dict: return obj - head, tail = elems[0], elems[1:] - if strict and head not in obj: - raise PathNotFoundError(path) - return g(tail, obj.get(head, fallback)) - - return g() - - def set(self, path, value, clobber = False): - elementsAll = self.split_path(path) - - def s(elems = elementsAll, obj = self.data): - head, tail = elems[0], elems[1:] - - # YANDEV MODE ACTIVATE!!! - if not tail: - obj[head] = value - else: - if head not in obj or type(obj[head]) != dict: - if clobber: - obj[head] = {} - else: - raise NotDictError(self.delimiter.join(elementsAll[:-len(tail)])) - - s(tail, obj[head]) - - s() - - def __getitem__(self, path): - return self.get(path, self.strict_subscript) - - def __setitem__(self, path, value): - self.set(path, value, self.clobber_subscript) -