backup-tool/app/parser.py

37 lines
968 B
Python

from __future__ import annotations
import yaml
from pathlib import Path
from typing import List, Union
from specs import Spec, DirectorySpec
def read_specs_file(path: Union[str, Path]) -> List[Spec]:
with open(path, "r") as yaml_file:
data = yaml.safe_load(yaml_file, Loader=yaml.FullLoader)
categories = [("directories", DirectorySpec)]
specs = []
for key, class_name in categories:
if key not in data["specs"]:
continue
# Check what defaults are present
defaults = []
if data.get("defaults"):
if data["defaults"].get("all"):
defaults.append(data["defaults"]["all"])
if data["defaults"].get(key):
defaults.append(data["defaults"][key])
specs.extend(
[
class_name.from_dict(name, spec, *defaults)
for name, spec in data["specs"][key].items()
]
)
return specs