feat(config): Schema validator, initial config merger setup

This commit is contained in:
2026-04-23 11:31:01 +02:00
parent 5126e0373f
commit 541a876307
7 changed files with 64 additions and 2 deletions
+2
View File
@@ -9,6 +9,7 @@ import commands.init as init
import commands.pull as pull import commands.pull as pull
import commands.push as push import commands.push as push
import commands.prepare as setup import commands.prepare as setup
from config import load_config
if __name__ == "__main__": if __name__ == "__main__":
args, ap = cliargs.add_cli_args() args, ap = cliargs.add_cli_args()
@@ -29,6 +30,7 @@ if __name__ == "__main__":
\\___/ \\___/
""") """)
print(load_config("config.yml"))
try: try:
if args.cmd == "commit": if args.cmd == "commit":
commit.commit(args.force, args.no_render) commit.commit(args.force, args.no_render)
+6
View File
@@ -88,6 +88,12 @@
}, },
"maxItems": 5, "maxItems": 5,
"minItems": 1 "minItems": 1
},
"count": {
"type": "number",
"description": "The number of mirrors to add to the list",
"maximum": 20,
"minimum": 3
} }
}, },
"required": [ "required": [
+31
View File
@@ -0,0 +1,31 @@
from typing import Any, cast
import yaml
from config import validator
from config.merger import merge_configs
def _load_config_file(file: str):
with open(file, "r") as f:
parsed = yaml.load(f, Loader=yaml.FullLoader)
return parsed
def load_config(file: str):
# Load and validate initial config
try:
loaded_conf = _load_config_file(file)
except Exception:
return {}
if not validator.validate(loaded_conf):
return {}
conf = cast(dict[str, Any], loaded_conf)
requires = cast(list[str], conf["requires"])
conf.pop("requires")
# Recursively load files
for conf_file in requires:
conf = merge_configs(conf, load_config(conf_file))
return conf
+6
View File
@@ -0,0 +1,6 @@
def merge_configs(config: dict, new_config: dict):
if len(new_config) == 0 or len(config) == 0:
return config
# Merge configs
return config
View File
+18 -2
View File
@@ -1,2 +1,18 @@
def validate(): import json
pass import jsonschema
with open("config.schema.json") as file:
schema = json.load(file)
def validate(config):
try:
jsonschema.validate(config, schema)
except jsonschema.SchemaError:
print("Schema invalid")
return False
except jsonschema.ValidationError:
print("Config invalid")
return False
return True
+1
View File
@@ -1,3 +1,4 @@
pyyaml
pylette pylette
argcomplete argcomplete
inquirer inquirer