validation_element.py 1016 B

12345678910111213141516171819202122232425262728293031
  1. from typing import Any, Callable, Dict, Optional
  2. from .value_element import ValueElement
  3. class ValidationElement(ValueElement):
  4. def __init__(self, validation: Dict[str, Callable[..., bool]], **kwargs: Any) -> None:
  5. super().__init__(**kwargs)
  6. self.validation = validation
  7. self._error: Optional[str] = None
  8. @property
  9. def error(self) -> Optional[str]:
  10. """The latest error message from the validation functions."""
  11. return self._error
  12. def validate(self) -> None:
  13. """Validate the current value and set the error message if necessary."""
  14. for message, check in self.validation.items():
  15. if not check(self.value):
  16. self._error = message
  17. self.props(f'error error-message="{message}"')
  18. break
  19. else:
  20. self._error = None
  21. self.props(remove='error')
  22. def on_value_change(self, value: Any) -> None:
  23. super().on_value_change(value)
  24. self.validate()