|
9 | 9 | Flask Signals: https://flask.palletsprojects.com/en/1.1.x/signals/ |
10 | 10 | """ |
11 | 11 |
|
12 | | -from __future__ import annotations |
13 | | - |
14 | | -from contextlib import suppress |
15 | | -from typing import Protocol |
| 12 | +# observer.py |
16 | 13 |
|
| 14 | +from __future__ import annotations |
| 15 | +from typing import List |
17 | 16 |
|
18 | | -# define a generic observer type |
19 | | -class Observer(Protocol): |
| 17 | +class Observer: |
20 | 18 | def update(self, subject: Subject) -> None: |
| 19 | + """ |
| 20 | + Receive update from the subject. |
| 21 | +
|
| 22 | + Args: |
| 23 | + subject (Subject): The subject instance sending the update. |
| 24 | + """ |
21 | 25 | pass |
22 | 26 |
|
23 | 27 |
|
24 | 28 | class Subject: |
| 29 | + _observers: List[Observer] |
| 30 | + |
25 | 31 | def __init__(self) -> None: |
26 | | - self._observers: list[Observer] = [] |
| 32 | + """ |
| 33 | + Initialize the subject with an empty observer list. |
| 34 | + """ |
| 35 | + self._observers = [] |
27 | 36 |
|
28 | 37 | def attach(self, observer: Observer) -> None: |
| 38 | + """ |
| 39 | + Attach an observer to the subject. |
| 40 | +
|
| 41 | + Args: |
| 42 | + observer (Observer): The observer instance to attach. |
| 43 | + """ |
29 | 44 | if observer not in self._observers: |
30 | 45 | self._observers.append(observer) |
31 | 46 |
|
32 | 47 | def detach(self, observer: Observer) -> None: |
33 | | - with suppress(ValueError): |
| 48 | + """ |
| 49 | + Detach an observer from the subject. |
| 50 | +
|
| 51 | + Args: |
| 52 | + observer (Observer): The observer instance to detach. |
| 53 | + """ |
| 54 | + try: |
34 | 55 | self._observers.remove(observer) |
| 56 | + except ValueError: |
| 57 | + pass |
35 | 58 |
|
36 | | - def notify(self, modifier: Observer | None = None) -> None: |
| 59 | + def notify(self) -> None: |
| 60 | + """ |
| 61 | + Notify all attached observers by calling their update method. |
| 62 | + """ |
37 | 63 | for observer in self._observers: |
38 | | - if modifier != observer: |
39 | | - observer.update(self) |
| 64 | + observer.update(self) |
40 | 65 |
|
41 | 66 |
|
42 | 67 | class Data(Subject): |
|
0 commit comments