summaryrefslogtreecommitdiff
path: root/src/pyssg/configuration.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/pyssg/configuration.py')
-rw-r--r--src/pyssg/configuration.py63
1 files changed, 40 insertions, 23 deletions
diff --git a/src/pyssg/configuration.py b/src/pyssg/configuration.py
index 33a82cd..a2b48b6 100644
--- a/src/pyssg/configuration.py
+++ b/src/pyssg/configuration.py
@@ -12,24 +12,37 @@ DEFAULT_CONFIG_PATH: str = '$XDG_CONFIG_HOME/pyssg/config.yaml'
VERSION: str = version('pyssg')
-def __check_well_formed_config(config: dict) -> None:
- log.debug('checking that config file is well formed (at least contains mandatory fields')
- mandatory_config: dict = get_parsed_yaml('mandatory_config.yaml', 'pyssg.plt')[0]
-
- for section in mandatory_config.keys():
- log.debug('checking section "%s"', section)
- if not config[section]:
- log.error('config does not have section "%s"', section)
+def __check_well_formed_config(config: dict,
+ config_base: list[dict],
+ prefix_key: str = '') -> None:
+ for key in config_base[0].keys():
+ current_key: str = f'{prefix_key}.{key}' if prefix_key != '' else key
+ log.debug('checking "%s"', current_key)
+ if key not in config:
+ log.error('config doesn\'t have "%s"', current_key)
+ log.debug('key: %s; config.keys: %s', key, config.keys())
sys.exit(1)
+
+ # checks for dir_paths
+ if key == 'dirs':
+ if '/' not in config[key]:
+ log.error('config doesn\'t have "%s./"', current_key)
+ log.debug('key: %s; config.keys: %s', key, config[key].keys())
+ sys.exit(1)
+
+ log.debug('checking "%s" fields for (%s) dir_paths', key, ', '.join(config[key].keys()))
+ for dkey in config[key].keys():
+ new_current_key: str = f'{current_key}.{dkey}'
+ new_config_base: list[dict] = [config_base[1], config_base[1]]
+ __check_well_formed_config(config[key][dkey], new_config_base, new_current_key)
+ continue
+
# the case for elements that don't have nested elements
- if not mandatory_config[section]:
- log.debug('section "%s" doesn\'t need nested elements', section)
+ if not config_base[0][key]:
+ log.debug('"%s" doesn\'t need nested elements', current_key)
continue
- for option in mandatory_config[section].keys():
- log.debug('checking option "%s"', option)
- if option not in config[section] or not config[section][option]:
- log.error('config does not have option "%s" in section "%s"', option, section)
- sys.exit(1)
+ new_config_base: list[dict] = [config_base[0][key], config_base[1]]
+ __check_well_formed_config(config[key], new_config_base, current_key)
def __expand_all_paths(config: dict) -> None:
@@ -41,11 +54,15 @@ def __expand_all_paths(config: dict) -> None:
# not necessary to type deeper than the first dict
def get_parsed_config(path: str) -> list[dict]:
log.debug('reading config file "%s"', path)
- config: list[dict] = get_parsed_yaml(path) # type: ignore
+ config: list[dict] = get_parsed_yaml(path)
+ mandatory_config: list[dict] = get_parsed_yaml('mandatory_config.yaml', 'pyssg.plt')
log.info('found %s document(s) for configuration "%s"', len(config), path)
-
- __check_well_formed_config(config[0])
+ log.debug('checking that config file is well formed (at least contains mandatory fields')
+ # TODO: make it work with n yaml docs
+ __check_well_formed_config(config[0], mandatory_config)
+ log.error('testing')
+ sys.exit(1)
__expand_all_paths(config[0])
return config
@@ -55,12 +72,12 @@ def get_parsed_config(path: str) -> list[dict]:
# static config means config that shouldn't be changed by the user
def get_static_config() -> dict[str, dict]:
log.debug('reading and setting static config')
- config: dict = get_parsed_yaml('static_config.yaml', 'pyssg.plt')[0] # type: ignore
+ config: dict = get_parsed_yaml('static_config.yaml', 'pyssg.plt')[0]
+ # do I really need a lambda function...
+ current_time = lambda x : datetime.now(tz=timezone.utc).strftime(x)
config['info']['version'] = VERSION
- config['info']['rss_run_date'] = datetime.now(tz=timezone.utc)\
- .strftime(config['fmt']['rss_date'])
- config['info']['sitemap_run_date'] = datetime.now(tz=timezone.utc)\
- .strftime(config['fmt']['sitemap_date'])
+ config['info']['rss_run_date'] = current_time(config['fmt']['rss_date'])
+ config['info']['sitemap_run_date'] = current_time(config['fmt']['sitemap_date'])
return config