diff --git a/core/correctness/validation.py b/core/correctness/validation.py index 4a41bf9..b54d19a 100644 --- a/core/correctness/validation.py +++ b/core/correctness/validation.py @@ -178,10 +178,10 @@ def valid_dict(variable:Dict[Any, Any], key_type:Type, value_type:Type, f"in dict '{variable}'") def valid_list(variable:List[Any], entry_type:Type, - alt_types:List[Type]=[], min_length:int=1)->None: + alt_types:List[Type]=[], min_length:int=1, hint:str="")->None: """Checks that a given list is valid. Value types are checked and a ValueError or TypeError is raised if a problem is encountered.""" - check_type(variable, List) + check_type(variable, List, hint=hint) # Check length meets minimum if len(variable) < min_length: @@ -189,8 +189,12 @@ def valid_list(variable:List[Any], entry_type:Type, f"of length {min_length}") # Check type of each value - for entry in variable: - check_type(entry, entry_type, alt_types=alt_types) + for n, entry in enumerate(variable): + if hint: + check_type(entry, entry_type, alt_types=alt_types, + hint=f"{hint}[{n}]") + else: + check_type(entry, entry_type, alt_types=alt_types) def valid_path(variable:str, allow_base:bool=False, extension:str="", min_length:int=1): diff --git a/core/meow.py b/core/meow.py index c902680..9b9fb0f 100644 --- a/core/meow.py +++ b/core/meow.py @@ -507,7 +507,9 @@ def create_rule(pattern:BasePattern, recipe:BaseRecipe, through the 'new_rules' variable.""" check_type(pattern, BasePattern, hint="create_rule.pattern") check_type(recipe, BaseRecipe, hint="create_rule.recipe") - valid_list(new_rules, BaseRule, min_length=0) + valid_list(new_rules, BaseRule, min_length=0, hint="create_rule.new_rules") + + print("passed initial check") # Imported here to avoid circular imports at top of file import rules @@ -516,18 +518,24 @@ def create_rule(pattern:BasePattern, recipe:BaseRecipe, for r in inspect.getmembers(sys.modules["rules"], inspect.isclass) \ if (issubclass(r[1], BaseRule))]} + print("got base rules") + # Add in new rules for rule in new_rules: all_rules[(rule.pattern_type, rule.recipe_type)] = rule + print("got new rules") + # Find appropriate rule type from pattern and recipe types key = (type(pattern).__name__, type(recipe).__name__) + print("got key") if (key) in all_rules: return all_rules[key]( generate_rule_id(), pattern, recipe ) + print("no key") # Raise error if not valid rule type can be found raise TypeError(f"No valid rule for Pattern '{pattern}' and Recipe " f"'{recipe}' could be found.") diff --git a/functionality/naming.py b/functionality/naming.py index 072e3e2..ee245cb 100644 --- a/functionality/naming.py +++ b/functionality/naming.py @@ -23,7 +23,7 @@ def _generate_id(prefix:str="", length:int=16, existing_ids:List[str]=[], f"using values '{charset}' and length of '{length}'.") def generate_rule_id(): - _generate_id(prefix="rule_") + return _generate_id(prefix="rule_") def generate_job_id(): - _generate_id(prefix="job_") + return _generate_id(prefix="job_")