owo/owo/datafiles/__init__.py

72 lines
1.7 KiB
Python
Raw Normal View History

2023-03-06 10:53:49 -08:00
from pathlib import Path
from sys import platform
from yaml import load, dump
import os
2023-03-14 18:48:46 +00:00
import sys
import re
2023-03-06 10:53:49 -08:00
import collections.abc
_config={}
_files=[]
_configloaded = False
_LOCATIONS = {
'_YAMLCONFPATH':{
'_DIR':[
"{}/owo/".format(os.environ["XDG_CONFIG_HOME"]) if "XDG_CONFIG_HOME" in os.environ else str(Path.home())+"/.config/owo/",
"{}/".format(os.environ["XDG_CONFIG_HOME"]) if "XDG_CONFIG_HOME" in os.environ else str(Path.home())+"/.config/",
str(Path('~').resolve()),
2023-03-14 18:48:46 +00:00
str(Path().resolve())
2023-03-06 10:53:49 -08:00
],
'_FNAME_RE':
r"([ou^>]w[ou^<]|config)\.(ya?ml|c(on)?fi?g?)$"
}
}
2023-03-14 18:48:46 +00:00
def _mDC_listMatches(inp: str) -> list:
"\n".join(os.listdir(inp))
return re.findall(
_LOCATIONS['_YAMLCONFPATH']['_FNAME_RE'],
inp
)
def _makeDefaultConfs() -> list:
locates=[]
for x in _LOCATIONS['_YAMLCONFPATH']['_DIR']:
locates+=_mDC_listMatches(x)
return locates
2023-03-06 10:53:49 -08:00
def _updateConf(toAdd: dict):
2023-03-14 18:48:46 +00:00
_config.update(toAdd)
def _loadConfigFile(path: str):
try:
file = Path(path)
if file.exists() and not file.is_dir():
try:
conf = yaml.load(file.read_text())
except Exception as exc:
raise exc
else:
if not _config:
_config = conf
else:
_updateConf(conf)
if file not in _files:
_files+str(file)
except Exception as exc:
print(exc)
import traceback
traceback.print_exc(file=sys.stderr)
2023-03-06 10:53:49 -08:00
2023-03-14 18:48:46 +00:00
def initConfig(path: str = None) -> bool:
2023-03-06 10:53:49 -08:00
if _configloaded:
return True# If config already loaded, do not reload.
else:
2023-03-14 18:48:46 +00:00
_toLookIn=_makeDefaultConfs()+path
for loc in _toLookIn:
_loadConfigFile(loc)
2023-03-06 10:53:49 -08:00