base.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # -*- coding: utf-8 -*-
  2. """
  3. Abstrakte Basisklasse fuer Calendar Provider.
  4. Definiert die Schnittstelle die alle Provider implementieren muessen.
  5. """
  6. from abc import ABC, abstractmethod
  7. from datetime import datetime
  8. from plugins.calendar.models import CalendarEvent
  9. class CalendarProvider(ABC):
  10. """
  11. Abstrakte Basisklasse fuer Calendar Provider.
  12. Jeder Provider (Microsoft, Google, CalDAV) implementiert diese Schnittstelle.
  13. """
  14. def __init__(self, name: str, config: dict) -> None:
  15. """
  16. Initialisiert den Provider.
  17. Args:
  18. name: Provider-Schluessel aus Config (z.B. "outlook_firma")
  19. config: Provider-Konfiguration aus config.json
  20. """
  21. self.name = name
  22. self.config = config
  23. self._connected = False
  24. @property
  25. def is_connected(self) -> bool:
  26. """Ist der Provider verbunden?"""
  27. return self._connected
  28. @abstractmethod
  29. async def connect(self) -> bool:
  30. """
  31. Stellt die Verbindung zum Cloud-Dienst her.
  32. Returns:
  33. True bei erfolgreicher Verbindung
  34. """
  35. ...
  36. @abstractmethod
  37. async def disconnect(self) -> None:
  38. """Trennt die Verbindung."""
  39. ...
  40. @abstractmethod
  41. async def fetch_events(
  42. self,
  43. calendar_id: str,
  44. start: datetime,
  45. end: datetime,
  46. user: str = "",
  47. ) -> list[CalendarEvent]:
  48. """
  49. Ruft Events aus einem Kalender ab.
  50. Args:
  51. calendar_id: Kalender-ID beim Provider
  52. start: Startzeitpunkt des Abfragefensters
  53. end: Endzeitpunkt des Abfragefensters
  54. user: Benutzer fuer die API-Abfrage (z.B. Email)
  55. Returns:
  56. Liste von CalendarEvent
  57. """
  58. ...
  59. @abstractmethod
  60. async def create_event(
  61. self,
  62. calendar_id: str,
  63. title: str,
  64. start: datetime,
  65. end: datetime,
  66. user: str = "",
  67. location: str = "",
  68. description: str = "",
  69. attendees: list[str] | None = None,
  70. ) -> CalendarEvent | None:
  71. """
  72. Erstellt einen neuen Termin.
  73. Args:
  74. calendar_id: Ziel-Kalender-ID
  75. title: Titel des Termins
  76. start: Startzeitpunkt
  77. end: Endzeitpunkt
  78. user: Benutzer fuer die API-Abfrage
  79. location: Ort
  80. description: Beschreibung
  81. attendees: Teilnehmer
  82. Returns:
  83. Erstelltes CalendarEvent oder None bei Fehler
  84. """
  85. ...
  86. @abstractmethod
  87. async def health_check(self) -> bool:
  88. """
  89. Prueft ob die Verbindung aktiv und funktionsfaehig ist.
  90. Returns:
  91. True wenn Provider erreichbar ist
  92. """
  93. ...