Source code for fenn.notification.notifier

from collections.abc import Iterable

from fenn.logging import logger

from .service import Service


[docs] class Notifier: """Central notification manager that handles multiple notification services."""
[docs] def __init__(self) -> None: """Initialize the notifier with an empty list of services.""" self._services: list[Service] = []
[docs] def add_services( self, services: Iterable[type[Service]], ) -> None: """ Add a list of notification services. Example: app.register_notification_services([Discord, Telegram]) """ for service_cls in services: self.add_service(service_cls)
[docs] def add_service(self, service: type[Service]) -> None: """Add a notification service. Args: service: A service implementing the Service interface. """ self._services.append(service())
[docs] def remove_service(self, service: type[Service]) -> None: """Remove a notification service. Args: service: The service to remove. Raises: ValueError: If the service is not found. """ try: self._services.remove(service()) except ValueError as err: raise ValueError( f"Service {service.__name__} not found in services list" ) from err
[docs] def notify(self, message: str) -> None: """Send notification to all registered services. Args: message: The message to send. """ if not self._services: return for service in self._services: try: service.send_notification(message) logger.info( "Successfully sent notification via %s", service.__class__.__name__ ) except Exception as e: logger.error( "Failed to send notification via %s: %s", service.__class__.__name__, e, )
[docs] def get_services(self) -> list[str]: """Get list of registered service names. Returns: List of service class names. """ return [service.__class__.__name__ for service in self._services]
[docs] def clear_services(self) -> None: """Remove all registered services.""" self._services.clear()