from typing import List, Optional, Tuple, Set from dataclasses import dataclass, field ALLOWED_INPUT_TYPES = {"text", "number", "date", "select"} VALID_COMPARISONS = { "text": {"lt", "st", "eq", "ne"}, # longer than, shorter than, eq, or not eq, to the ref attrib "number": {"lt", "gt", "le", "ge", "eq", "ne"}, # <, >, <=, >=, ==, != "date": {"lt", "gt", "le", "ge", "eq", "ne"}, # <, >, <=, >=, ==, != "select": {"eq", "ne"} # eq, or not eq, to the ref attrib } @dataclass class Attribute: """Base class for all attribute types.""" attrib_name: str display_name: str html_input_type: Optional[str] = "text" required: bool = False unique: bool = False primary: bool = False default_val: Optional[str] = None compareto: Optional[List[Tuple[str, str]]] = None # Work in progress def validate(self) -> Optional[str]: """Validate common attributes. Returns an error message if invalid, otherwise None.""" if not self.attrib_name: return "Missing attribute name." if not self.display_name: return f"Missing display name for attribute '{self.attrib_name}'." if not self.html_input_type: return f"Missing input type for attribute '{self.attrib_name}'." if self.html_input_type not in ALLOWED_INPUT_TYPES: return f"Invalid input type '{self.html_input_type}' for attribute '{self.attrib_name}'." return None