Added parser.py docstrings
parent
3277af2ac5
commit
d513a03c4a
|
@ -1,3 +1,4 @@
|
||||||
|
"""Handles parsing a config file from disk."""
|
||||||
import yaml
|
import yaml
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Union
|
from typing import List, Union
|
||||||
|
@ -6,9 +7,19 @@ import skeleton
|
||||||
|
|
||||||
|
|
||||||
def read_specs_file(path: Union[str, Path]) -> List[Spec]:
|
def read_specs_file(path: Union[str, Path]) -> List[Spec]:
|
||||||
|
"""
|
||||||
|
Read a config file and merge it with the skeleton.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
path: path to the yaml config file
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A list of specs, parsed from the config.
|
||||||
|
"""
|
||||||
with open(path, "r") as yaml_file:
|
with open(path, "r") as yaml_file:
|
||||||
data = yaml.safe_load(yaml_file)
|
data = yaml.safe_load(yaml_file)
|
||||||
|
|
||||||
|
# NOTE shouldn't this be defined as a top-level variable?
|
||||||
categories = [
|
categories = [
|
||||||
("directories", DirectorySpec),
|
("directories", DirectorySpec),
|
||||||
("volumes", VolumeSpec),
|
("volumes", VolumeSpec),
|
||||||
|
@ -23,6 +34,7 @@ def read_specs_file(path: Union[str, Path]) -> List[Spec]:
|
||||||
|
|
||||||
# Check what defaults are present
|
# Check what defaults are present
|
||||||
defaults = {}
|
defaults = {}
|
||||||
|
|
||||||
if data.get("defaults"):
|
if data.get("defaults"):
|
||||||
if data["defaults"].get("all"):
|
if data["defaults"].get("all"):
|
||||||
defaults = skeleton.merge(defaults, data["defaults"]["all"])
|
defaults = skeleton.merge(defaults, data["defaults"]["all"])
|
||||||
|
|
|
@ -89,6 +89,9 @@ def merge_with_skeleton(data: Dict, skel: Dict) -> Dict:
|
||||||
data: dictionary containing the selected config values
|
data: dictionary containing the selected config values
|
||||||
skel: dictionary containing the skeleton (aka the def)
|
skel: dictionary containing the skeleton (aka the def)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
a new dictionary representing the two merged dictionaries
|
||||||
|
|
||||||
Todo:
|
Todo:
|
||||||
* Check if an infinite loop is possible
|
* Check if an infinite loop is possible
|
||||||
* Split info less complex functions
|
* Split info less complex functions
|
||||||
|
|
Loading…
Reference in New Issue