Skip to content

Commit 219e508

Browse files
committed
Get rid of Chump dependency for Pushover
1 parent cde5b10 commit 219e508

4 files changed

Lines changed: 37 additions & 64 deletions

File tree

Lines changed: 37 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import http.client
12
import logging
23
import re
3-
4-
import chump
4+
import urllib
55

66
from paradox.config import config as cfg
77
from paradox.event import EventLevel
@@ -10,12 +10,12 @@
1010
logger = logging.getLogger("PAI").getChild(__name__)
1111

1212
_level_2_priority = {
13-
EventLevel.NOTSET: chump.LOWEST,
14-
EventLevel.DEBUG: chump.LOWEST,
15-
EventLevel.INFO: chump.LOW,
16-
EventLevel.WARN: chump.NORMAL,
17-
EventLevel.ERROR: chump.HIGH,
18-
EventLevel.CRITICAL: chump.EMERGENCY,
13+
EventLevel.NOTSET: -2,
14+
EventLevel.DEBUG: -2,
15+
EventLevel.INFO: -1,
16+
EventLevel.WARN: 0,
17+
EventLevel.ERROR: 1,
18+
EventLevel.CRITICAL: 2,
1919
}
2020

2121

@@ -31,66 +31,45 @@ def __init__(self, alarm):
3131
cfg.PUSHOVER_MIN_EVENT_LEVEL,
3232
)
3333

34-
self.app = None
3534
self.users = {}
3635

37-
def _run(self):
38-
super()._run()
39-
40-
self.app = chump.Application(cfg.PUSHOVER_KEY)
41-
if not self.app.is_authenticated:
42-
raise Exception(
43-
"Failed to authenticate with Pushover. Please check PUSHOVER_APPLICATION_KEY"
44-
)
45-
4636
def send_message(self, message: str, level: EventLevel):
4737
for settings in cfg.PUSHOVER_BROADCAST_KEYS:
4838
user_key = settings["user_key"]
4939
devices_raw = settings["devices"]
5040

51-
user = self.users.get(user_key)
52-
53-
if user is None:
54-
user = self.users[user_key] = self.app.get_user(user_key)
55-
56-
if not user.is_authenticated:
57-
raise Exception(
58-
"Failed to check user key with Pushover. Please check PUSHOVER_BROADCAST_KEYS[%s]"
59-
% user_key
60-
)
61-
6241
if devices_raw == "*" or devices_raw is None:
63-
try:
64-
user.send_message(
65-
message,
66-
title="Alarm",
67-
priority=_level_2_priority.get(level, chump.NORMAL),
68-
)
69-
logger.info(f"Notification sent: {message}, level={level}")
70-
except Exception:
71-
logger.exception("Pushover send message")
72-
42+
self._send_pushover_message(user_key, message, level)
7343
else:
7444
devices = list(filter(bool, re.split(r"[\s]*,[\s]*", devices_raw)))
7545

76-
for elem in (elem for elem in devices if elem not in user.devices):
77-
logger.warning(
78-
"%s is not in the Pushover device list for the user %s"
79-
% (elem, user_key)
80-
)
81-
8246
for device in devices:
83-
try:
84-
user.send_message(
85-
message,
86-
title="PAI",
87-
device=device,
88-
priority=_level_2_priority.get(level, chump.NORMAL),
89-
)
90-
logger.info(
91-
f"Notification sent: {message}, level={level}, device={device}"
92-
)
93-
except Exception:
94-
logger.exception("Pushover send message")
47+
self._send_pushover_message(user_key, message, level, device)
48+
49+
def _send_pushover_message(self, user_key, message, level, device=None):
50+
conn = http.client.HTTPSConnection("api.pushover.net:443")
51+
params = {
52+
"token": cfg.PUSHOVER_KEY,
53+
"user": user_key,
54+
"message": message,
55+
"priority": _level_2_priority.get(level, 0),
56+
"title": "Alarm",
57+
}
58+
if device:
59+
params["device"] = device
60+
61+
conn.request(
62+
"POST",
63+
"/1/messages.json",
64+
urllib.parse.urlencode(params),
65+
{"Content-type": "application/x-www-form-urlencoded"},
66+
)
9567

96-
# TODO: Missing the message reception
68+
response = conn.getresponse()
69+
if response.status != 200:
70+
logger.error(f"Failed to send message: {response.reason}")
71+
else:
72+
logger.info(
73+
f"Notification sent: {message}, level={level}, device={device if device else 'all'}"
74+
)
75+
conn.close()

paradox/lib/help.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@
3636
"yaml": dict(
3737
mandatory=False, desc="the IP150 connection", install_name="pyyaml>=5.2.0"
3838
),
39-
"chump": dict(
40-
mandatory=False, desc="the Pushover interface", install_name="chump>=1.6.0"
41-
),
4239
"pydbus": dict(
4340
mandatory=False, desc="the Signal interface", install_name="pydbus>=0.6.0"
4441
),

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
argparse>=1.4.0
2-
chump>=1.6.0
32
construct~=2.9.43
43
flake8
54
paho_mqtt>=1.5.0,<2

setup.cfg

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ YAML =
5555
Pushbullet =
5656
pushbullet.py>=0.11.0
5757
ws4py>=0.4.2
58-
Pushover =
59-
chump>=1.6.0
6058
Signal =
6159
pygobject>=3.20.0
6260
pydbus>=0.6.0

0 commit comments

Comments
 (0)