form_fields.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # -*- coding: utf-8 -*-
  2. """
  3. Formular-Feld-Definitionen fuer Scheduler-Komponenten in der TUI.
  4. """
  5. from dataclasses import dataclass, field
  6. from enum import Enum
  7. from typing import Any
  8. class FieldType(Enum):
  9. """Typ eines Formular-Felds."""
  10. TEXT = "text" # Einzeiliges Textfeld
  11. TEXTAREA = "textarea" # Mehrzeiliges Textfeld
  12. NUMBER = "number" # Numerisches Feld (int/float)
  13. CHECKBOX = "checkbox" # Boolean-Toggle
  14. SELECT = "select" # Dropdown-Auswahl
  15. RADIO = "radio" # Radio-Button-Gruppe
  16. DATETIME = "datetime" # Datum/Zeit-Eingabe (ISO-Format)
  17. TAGS = "tags" # Komma-separierte Liste
  18. WEEKDAYS = "weekdays" # Wochentag-Auswahl (Checkboxen Mo-So)
  19. KEY_VALUE = "key_value" # Key-Value Paare (Dict)
  20. @dataclass
  21. class FormField:
  22. """
  23. Beschreibt ein Formular-Feld fuer die TUI.
  24. """
  25. name: str # Interner Feldname (z.B. "expression")
  26. label: str # Anzeige-Label (z.B. "Cron-Ausdruck")
  27. field_type: FieldType = FieldType.TEXT # Widget-Typ
  28. required: bool = False # Pflichtfeld
  29. default: Any = None # Standardwert
  30. placeholder: str = "" # Platzhalter-Text
  31. help_text: str = "" # Hilfetext unter dem Feld
  32. # Text/Textarea
  33. max_length: int = 0 # Max. Zeichenlaenge (0=unbegrenzt)
  34. lines: int = 1 # Zeilen fuer Textarea
  35. # Number
  36. min_value: float | None = None # Minimum
  37. max_value: float | None = None # Maximum
  38. step: float = 1.0 # Schrittweite
  39. is_float: bool = False # Float statt Int
  40. # Select/Radio
  41. choices: list[tuple[str, str]] = field(default_factory=list) # (value, label) Paare
  42. # Validierung
  43. pattern: str = "" # Regex-Pattern fuer Validierung
  44. pattern_error: str = "" # Fehlermeldung bei Pattern-Mismatch
  45. # Gruppierung
  46. group: str = "" # Optionale Gruppe fuer visuelle Trennung
  47. @dataclass
  48. class FormValidationError:
  49. """Validierungsfehler fuer ein Formular-Feld."""
  50. field_name: str
  51. message: str