web-app-demos/files.py
2025-03-17 16:11:01 -06:00

39 lines
No EOL
1 KiB
Python

from pathlib import Path
import tomllib
import string
def merge(a: dict, b: dict, path=[]):
for key in b:
if key in a:
if isinstance(a[key], dict) and isinstance(b[key], dict):
merge(a[key], b[key], path + [str(key)])
elif a[key] != b[key]:
raise Exception('Conflict at ' + '.'.join(path + [str(key)]))
else:
a[key] = b[key]
class Config:
def __init__(self, config_path='config', parent_config={}):
self.config = {}
for file_path in Path(config_path).glob('**/*.toml'):
with open(file_path, 'rb') as f:
merge(self.config, tomllib.load(f))
merge(self.config, parent_config)
def __getitem__(self, item):
return self.config[item]
class Templates:
def __init__(self, template_path='templates'):
self.templates = {}
path = Path(template_path)
for file_path in path.glob('**/*.html'):
with open(file_path, "r", encoding='utf-8') as f:
relative_path = file_path.relative_to(path).as_posix()
self.templates[relative_path] = string.Template(f.read())
def __getitem__(self, item):
return self.templates[item]