| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- # -*- coding: utf-8 -*-
- """
- Abstrakte Basisklasse fuer Calendar Provider.
- Definiert die Schnittstelle die alle Provider implementieren muessen.
- """
- from abc import ABC, abstractmethod
- from datetime import datetime
- from plugins.calendar.models import CalendarEvent
- class CalendarProvider(ABC):
- """
- Abstrakte Basisklasse fuer Calendar Provider.
- Jeder Provider (Microsoft, Google, CalDAV) implementiert diese Schnittstelle.
- """
- def __init__(self, name: str, config: dict) -> None:
- """
- Initialisiert den Provider.
- Args:
- name: Provider-Schluessel aus Config (z.B. "outlook_firma")
- config: Provider-Konfiguration aus config.json
- """
- self.name = name
- self.config = config
- self._connected = False
- @property
- def is_connected(self) -> bool:
- """Ist der Provider verbunden?"""
- return self._connected
- @abstractmethod
- async def connect(self) -> bool:
- """
- Stellt die Verbindung zum Cloud-Dienst her.
- Returns:
- True bei erfolgreicher Verbindung
- """
- ...
- @abstractmethod
- async def disconnect(self) -> None:
- """Trennt die Verbindung."""
- ...
- @abstractmethod
- async def fetch_events(
- self,
- calendar_id: str,
- start: datetime,
- end: datetime,
- user: str = "",
- ) -> list[CalendarEvent]:
- """
- Ruft Events aus einem Kalender ab.
- Args:
- calendar_id: Kalender-ID beim Provider
- start: Startzeitpunkt des Abfragefensters
- end: Endzeitpunkt des Abfragefensters
- user: Benutzer fuer die API-Abfrage (z.B. Email)
- Returns:
- Liste von CalendarEvent
- """
- ...
- @abstractmethod
- async def create_event(
- self,
- calendar_id: str,
- title: str,
- start: datetime,
- end: datetime,
- user: str = "",
- location: str = "",
- description: str = "",
- attendees: list[str] | None = None,
- ) -> CalendarEvent | None:
- """
- Erstellt einen neuen Termin.
- Args:
- calendar_id: Ziel-Kalender-ID
- title: Titel des Termins
- start: Startzeitpunkt
- end: Endzeitpunkt
- user: Benutzer fuer die API-Abfrage
- location: Ort
- description: Beschreibung
- attendees: Teilnehmer
- Returns:
- Erstelltes CalendarEvent oder None bei Fehler
- """
- ...
- @abstractmethod
- async def health_check(self) -> bool:
- """
- Prueft ob die Verbindung aktiv und funktionsfaehig ist.
- Returns:
- True wenn Provider erreichbar ist
- """
- ...
|