summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Luevano Alvarado <david@luevano.xyz>2023-02-24 03:53:13 -0600
committerDavid Luevano Alvarado <david@luevano.xyz>2023-02-24 03:53:13 -0600
commita609b1cb2b43fd17e03efa62314f679b47ae6cb5 (patch)
tree2c495cecb477e01766343fbdae2e8c7c84fc63db /src
parent28c2ae9102d4204b3f0a79419eec1e72dbbc529a (diff)
add utils tests, small refactor
Diffstat (limited to 'src')
-rw-r--r--src/pyssg/configuration.py22
-rw-r--r--src/pyssg/utils.py20
2 files changed, 28 insertions, 14 deletions
diff --git a/src/pyssg/configuration.py b/src/pyssg/configuration.py
index 3cc5430..e2dc26b 100644
--- a/src/pyssg/configuration.py
+++ b/src/pyssg/configuration.py
@@ -12,10 +12,11 @@ DEFAULT_CONFIG_PATH: str = '$XDG_CONFIG_HOME/pyssg/config.yaml'
VERSION: str = version('pyssg')
-def __check_well_formed_config(config: dict,
- config_base: list[dict],
+def __check_well_formed_config(config: dict[str, Any],
+ config_base: list[dict[str, Any]],
prefix_key: str = '') -> None:
for key in config_base[0].keys():
+ new_config_base: list[dict[str, Any]] = []
current_key: str = f'{prefix_key}.{key}' if prefix_key != '' else key
log.debug('checking "%s"', current_key)
if key not in config:
@@ -27,7 +28,7 @@ def __check_well_formed_config(config: dict,
try:
config[key].keys()
except AttributeError:
- log.error('config doesn\'t have any dirs configs (dirs.*)')
+ log.error('config doesn\'t have any dirs (dirs.*)')
sys.exit(1)
if '/' not in config[key]:
log.debug('key: %s; config.keys: %s', key, config[key].keys())
@@ -37,7 +38,7 @@ def __check_well_formed_config(config: dict,
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]]
+ new_config_base = [config_base[1], config_base[1]]
__check_well_formed_config(config[key][dkey],
new_config_base,
new_current_key)
@@ -46,11 +47,11 @@ def __check_well_formed_config(config: dict,
if not config_base[0][key]:
log.debug('"%s" doesn\'t need nested elements', current_key)
continue
- new_config_base: list[dict] = [config_base[0][key], config_base[1]]
+ new_config_base = [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:
+def __expand_all_paths(config: dict[str, Any]) -> None:
log.debug('expanding all path options: %s', config['path'].keys())
for option in config['path'].keys():
config['path'][option] = get_expanded_path(config['path'][option])
@@ -59,10 +60,11 @@ def __expand_all_paths(config: dict) -> None:
# not necessary to type deeper than the first dict
def get_parsed_config(path: str,
mc_package: str = 'mandatory_config.yaml',
- plt_resource: str = 'pyssg.plt') -> list[dict]:
+ plt_resource: str = 'pyssg.plt') -> list[dict[str, Any]]:
log.debug('reading config file "%s"', path)
- config_all: list[dict] = get_parsed_yaml(path)
- mandatory_config: list[dict] = get_parsed_yaml(mc_package, plt_resource)
+ config_all: list[dict[str, Any]] = get_parsed_yaml(path)
+ mandatory_config: list[dict[str, Any]] = get_parsed_yaml(mc_package,
+ plt_resource)
log.info('found %s document(s) for config "%s"', len(config_all), path)
log.debug('checking that config file is well formed')
for config in config_all:
@@ -74,7 +76,7 @@ def get_parsed_config(path: str,
# not necessary to type deeper than the first dict,
# static config means config that shouldn't be changed by the user
def get_static_config(sc_package: str = 'static_config.yaml',
- plt_resource: str = 'pyssg.plt') -> dict[str, dict]:
+ plt_resource: str = 'pyssg.plt') -> dict[str, Any]:
log.debug('reading and setting static config')
config: dict[str, Any] = get_parsed_yaml(sc_package, plt_resource)[0]
diff --git a/src/pyssg/utils.py b/src/pyssg/utils.py
index 8300a5c..b1ed8c1 100644
--- a/src/pyssg/utils.py
+++ b/src/pyssg/utils.py
@@ -20,7 +20,8 @@ def get_file_list(path: str,
dirs[:] = [d for d in dirs if d not in exclude_dirs]
for file in files:
if file.endswith(exts):
- # [1:] is required to remove the '/' at the beginning after replacing
+ # [1:] is required to remove the '/'
+ # at the beginning after replacing
file_name: str = os.path.join(root, file).replace(path, '')[1:]
file_list.append(file_name)
log.debug('added file "%s" without "%s" part: "%s"',
@@ -44,7 +45,8 @@ def get_dir_structure(path: str,
if root in dir_list:
dir_list.remove(root)
log.debug('removed dir "%s" as it already is in the list', root)
- # not removing the 'path' part here, as comparisons with 'root' would fail
+ # not removing the 'path' part here,
+ # as comparisons with 'root' would fail
joined_dir: str = os.path.join(root, d)
dir_list.append(joined_dir)
log.debug('added dir "%s" to the list', joined_dir)
@@ -53,19 +55,29 @@ def get_dir_structure(path: str,
return [d.replace(path, '')[1:] for d in dir_list]
+# TODO: probably change it so it returns a bool, easier to check
def create_dir(path: str, p: bool = False, silent=False) -> None:
+ log_msg: str = ''
try:
if p:
os.makedirs(path)
else:
os.mkdir(path)
+ log_msg = f'created directory "{path}"'
if not silent:
- log.info('created directory "%s"', path)
+ log.info(log_msg)
+ log.debug(log_msg)
except FileExistsError:
+ log_msg = f'directory "{path}" exists, ignoring'
if not silent:
- log.info('directory "%s" already exists, ignoring', path)
+ log.info(log_msg)
+ log.debug(log_msg)
+# TODO: change this as it doesn't take directories into account,
+# a file can be copied into a directory, need to get the filename
+# and use it when copying
+# TODO: probably change it so it returns a bool, easier to check
def copy_file(src: str, dst: str) -> None:
if not os.path.exists(dst):
shutil.copy2(src, dst)