from typing import List from definitions.attribute import Attribute def validate_config(item_attributes: List[Attribute]) -> str: """ Validate the configuration file to ensure all attributes are properly defined. Returns "Ok" if everything is valid, otherwise returns an error message. """ # Check for duplicate attribute names attrib_names = [attrib.attrib_name for attrib in item_attributes] if len(attrib_names) != len(set(attrib_names)): return "Duplicate attribute names are not allowed." # Validate each attribute for attrib in item_attributes: error = attrib.validate() if error: return error # Validate comparison (if applicable) if attrib.compareto: if not isinstance(attrib.compareto, list) or not all( isinstance(pair, tuple) and len(pair) == 2 for pair in attrib.compareto ): return f"Invalid comparison format for attribute '{attrib.attrib_name}'. Expected a list of tuples." for cmp, ref_attr in attrib.compareto: if cmp not in ["lt", "gt", "le", "ge", "eq"]: return f"Invalid comparison operator '{cmp}' for attribute '{attrib.attrib_name}'." if ref_attr not in attrib_names: return f"Invalid reference attribute '{ref_attr}' for comparison in attribute '{attrib.attrib_name}'." return "Ok"