flask_crud_app/functions/validate_config.py

32 lines
1.4 KiB
Python

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"