Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Der-Henning
GitHub Repository: Der-Henning/tgtg
Path: blob/main/tgtg_scanner/notifiers/script.py
1494 views
1
import logging
2
import subprocess
3
4
from tgtg_scanner.errors import MaskConfigurationError, ScriptConfigurationError
5
from tgtg_scanner.models import Config, Favorites, Item, Reservations
6
from tgtg_scanner.models.reservations import Reservation
7
from tgtg_scanner.notifiers import Notifier
8
9
log = logging.getLogger("tgtg")
10
11
12
class Script(Notifier):
13
"""Notifier for the script output."""
14
15
def __init__(self, config: Config, reservations: Reservations, favorites: Favorites):
16
super().__init__(config, reservations, favorites)
17
self.enabled = config.script.enabled
18
self.command = config.script.command
19
self.cron = config.script.cron
20
21
if self.enabled:
22
if self.command is None:
23
raise ScriptConfigurationError()
24
try:
25
Item.check_mask(self.command)
26
except MaskConfigurationError as exc:
27
raise ScriptConfigurationError(exc.message) from exc
28
29
def _send(self, item: Item | Reservation) -> None:
30
if self.command is None:
31
raise ScriptConfigurationError()
32
if isinstance(item, Item):
33
args = [item.unmask(arg) for arg in self.command.split()]
34
subprocess.Popen(args)
35
36
def __repr__(self) -> str:
37
return f"Shell script: {self.command}"
38
39