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