diff --git a/workflow/Snakefile b/workflow/Snakefile index e5d270b8957a3e7c2fdf9314cd9950c8855a8507..346f081af9b112723e2627511a1691206f15f68b 100644 --- a/workflow/Snakefile +++ b/workflow/Snakefile @@ -28,36 +28,37 @@ try: with open(template_config_path) as _file: template_config = yaml.safe_load(_file) logger.info(f"Loaded template config from {template_config_path}.") - # Check if config contains required fields in example config - for key in template_config: - if key != 'optional': - assert key in config except FileNotFoundError: logger.error(f"No config file found at {template_config_path}! ") raise -except AssertionError: - logger.error(f"Required config fields from {template_config_path} do not match {config.keys()}") - raise +# Check if config contains required fields in example config +missing = [key for key in template_config if key not in config and key != 'optional'] +if missing: + err_msg = f"Required keys missing: {missing}" + logger.error(err_msg) + raise ValueError(err_msg) # Check if optional field available -if 'optional' not in config: +if 'optional' not in config or config['optional'] != dict: + logger.info(f'No "optional" field found or no valid configuration for config.yaml.') config['optional'] = {} # Check optional fields and include in config if not present for optkey, value in template_config['optional'].items(): if optkey not in config['optional']: config['optional'][optkey] = value - logger.info(f"Added optional field: \"{optkey}\" with value: \"{value}\" to config.") + logger.info(f'Set default value for optional parameter "{optkey}" to : "{value}"') # Parse YAML rule config file -if 'rule_config' in config['optional'] and config['optional']['rule_config']: - try: - with open(config['optional']['rule_config']) as _file: - rule_config = yaml.safe_load(_file) - logger.info(f"Loaded rule_config from {config['optional']['rule_config']}.") - except FileNotFoundError: - logger.error(f"No rule config file found at {config['optional']['rule_config']}. Either provide file or remove rule_config parameter from config.yaml! ") - raise -else: +try: + with open(config['optional']['rule_config']) as _file: + rule_config = yaml.safe_load(_file) + logger.info(f"Loaded rule_config from {config['optional']['rule_config']}.") +except TypeError: + logger.error(f'No string supplied at field "rule_config", but: {config["optional"]["rule_config"]}') +except FileNotFoundError: + logger.error(f"No rule config file found at {config['optional']['rule_config']}. Either provide file or remove rule_config parameter from config.yaml! ") + raise +except KeyError: rule_config = {} logger.warning(f"No rule config specified: using default values for all tools.")