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