Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Der-Henning
GitHub Repository: Der-Henning/tgtg
Path: blob/main/tgtg_scanner/notifiers/notifiers.py
1203 views
1
import logging
2
3
from tgtg_scanner.models import Config, Cron, Favorites, Item, Reservations
4
from tgtg_scanner.models.reservations import Reservation
5
from tgtg_scanner.notifiers.apprise import Apprise
6
from tgtg_scanner.notifiers.base import Notifier
7
from tgtg_scanner.notifiers.console import Console
8
from tgtg_scanner.notifiers.discord import Discord
9
from tgtg_scanner.notifiers.ifttt import IFTTT
10
from tgtg_scanner.notifiers.ntfy import Ntfy
11
from tgtg_scanner.notifiers.push_safer import PushSafer
12
from tgtg_scanner.notifiers.script import Script
13
from tgtg_scanner.notifiers.smtp import SMTP
14
from tgtg_scanner.notifiers.telegram import Telegram
15
from tgtg_scanner.notifiers.webhook import WebHook
16
17
log = logging.getLogger("tgtg")
18
19
NOTIFIERS: list[type[Notifier]] = [Apprise, Console, PushSafer, SMTP, IFTTT, Ntfy, WebHook, Telegram, Script, Discord]
20
21
22
class Notifiers:
23
"""Notifier Manager."""
24
25
def __init__(self, config: Config, reservations: Reservations, favorites: Favorites):
26
self._notifiers: list[Notifier] = [NotifierCls(config, reservations, favorites) for NotifierCls in NOTIFIERS]
27
log.info("Activated notifiers:")
28
if self.notifier_count == 0:
29
log.warning("No notifiers configured!")
30
for notifier in self._enabled_notifiers:
31
log.info("- %s", notifier)
32
if notifier.cron != Cron("* * * * *"):
33
log.info(" Schedule: %s", notifier.cron.get_description(config.locale))
34
35
@property
36
def _enabled_notifiers(self) -> list[Notifier]:
37
return [notifier for notifier in self._notifiers if notifier.enabled]
38
39
@property
40
def notifier_count(self) -> int:
41
"""Number of enabled notifiers.
42
43
Returns:
44
int: notifier count
45
46
"""
47
return len(self._enabled_notifiers)
48
49
def send(self, item: Item | Reservation) -> None:
50
"""Send notifications on all enabled notifiers.
51
52
Args:
53
item (Item, Reservation): Item information to send
54
55
"""
56
for notifier in self._notifiers:
57
notifier.send(item)
58
59
def start(self) -> None:
60
"""Start all notifiers."""
61
for notifier in self._notifiers:
62
try:
63
notifier.start()
64
except Exception as exc:
65
log.warning("Error starting %s - %s", notifier, exc)
66
67
def stop(self) -> None:
68
"""Stop all notifiers."""
69
for notifier in self._notifiers:
70
try:
71
notifier.stop()
72
except Exception as exc:
73
log.warning("Error stopping %s - %s", notifier, exc)
74
75