generated from LouisMazin/PythonApplicationTemplate
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from typing import Callable, Dict, List, Any
|
|
|
|
class NotificationType:
|
|
THEME = 0
|
|
LANGUAGE = 1
|
|
DICOM = 2
|
|
|
|
class ObserverManager:
|
|
"""
|
|
Gestionnaire d'observateurs pour gérer les événements et notifier les abonnés.
|
|
Chaque événement est identifié par une clé (string), et les abonnés sont des callbacks.
|
|
"""
|
|
def __init__(self):
|
|
self.observers: Dict[str, List[Callable[[Any], None]]] = {}
|
|
|
|
def subscribe(self, event: str, callback: Callable[[Any], None]) -> None:
|
|
"""
|
|
Ajoute un callback à la liste des abonnés pour l'événement donné.
|
|
"""
|
|
if event not in self.observers:
|
|
self.observers[event] = []
|
|
if callback not in self.observers[event]:
|
|
self.observers[event].append(callback)
|
|
|
|
def unsubscribe(self, event: str, callback: Callable[[Any], None]) -> None:
|
|
"""
|
|
Retire un callback de la liste des abonnés pour l'événement donné.
|
|
"""
|
|
if event in self.observers and callback in self.observers[event]:
|
|
self.observers[event].remove(callback)
|
|
if not self.observers[event]:
|
|
del self.observers[event]
|
|
|
|
def notify(self, event: NotificationType) -> None:
|
|
"""
|
|
Notifie tous les abonnés de l'événement donné, en leur passant la donnée.
|
|
"""
|
|
if event in self.observers:
|
|
for callback in self.observers[event]:
|
|
callback()
|