Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Der-Henning
GitHub Repository: Der-Henning/tgtg
Path: blob/main/tgtg_scanner/notifiers/apprise.py
1494 views
1
import logging
2
3
import apprise
4
5
from tgtg_scanner.errors import AppriseConfigurationError, MaskConfigurationError
6
from tgtg_scanner.models import Config, Favorites, Item, Reservations
7
from tgtg_scanner.models.reservations import Reservation
8
from tgtg_scanner.notifiers.base import Notifier
9
10
log = logging.getLogger("tgtg")
11
12
13
class Apprise(Notifier):
14
"""Notifier for Apprise.
15
16
For more information on Apprise visit https://github.com/caronc/apprise.
17
"""
18
19
def __init__(self, config: Config, reservations: Reservations, favorites: Favorites):
20
super().__init__(config, reservations, favorites)
21
self.enabled = config.apprise.enabled
22
self.title = config.apprise.title
23
self.body = config.apprise.body
24
self.url = config.apprise.url
25
self.cron = config.apprise.cron
26
if self.enabled:
27
if self.url is None or self.body is None or self.title is None:
28
raise AppriseConfigurationError()
29
try:
30
Item.check_mask(self.title)
31
Item.check_mask(self.body)
32
Item.check_mask(self.url)
33
except MaskConfigurationError as exc:
34
raise AppriseConfigurationError(exc.message) from exc
35
36
def _send(self, item: Item | Reservation) -> None:
37
"""Sends item information via configured Apprise URL."""
38
if isinstance(item, Item):
39
if self.url is None or self.body is None or self.title is None:
40
raise AppriseConfigurationError()
41
url = item.unmask(self.url)
42
title = item.unmask(self.title)
43
body = item.unmask(self.body)
44
45
log.debug("Apprise url: %s", url)
46
log.debug("Apprise title: %s", title)
47
log.debug("Apprise body: %s", body)
48
49
apobj = apprise.Apprise()
50
apobj.add(self.url)
51
apobj.notify(title=title, body=body)
52
apobj.clear()
53
54
def __repr__(self) -> str:
55
return f"Apprise: {self.url}"
56
57