|
|
|
@ -24,6 +24,7 @@
|
|
|
|
|
# THE SOFTWARE.
|
|
|
|
|
|
|
|
|
|
import re
|
|
|
|
|
import six
|
|
|
|
|
import requests
|
|
|
|
|
|
|
|
|
|
from .NotifyBase import NotifyBase
|
|
|
|
@ -52,6 +53,57 @@ class PushoverPriority(object):
|
|
|
|
|
EMERGENCY = 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Sounds
|
|
|
|
|
class PushoverSound(object):
|
|
|
|
|
PUSHOVER = 'pushover'
|
|
|
|
|
BIKE = 'bike'
|
|
|
|
|
BUGLE = 'bugle'
|
|
|
|
|
CASHREGISTER = 'cashregister'
|
|
|
|
|
CLASSICAL = 'classical'
|
|
|
|
|
COSMIC = 'cosmic'
|
|
|
|
|
FALLING = 'falling'
|
|
|
|
|
GAMELAN = 'gamelan'
|
|
|
|
|
INCOMING = 'incoming'
|
|
|
|
|
INTERMISSION = 'intermission'
|
|
|
|
|
MAGIC = 'magic'
|
|
|
|
|
MECHANICAL = 'mechanical'
|
|
|
|
|
PIANOBAR = 'pianobar'
|
|
|
|
|
SIREN = 'siren'
|
|
|
|
|
SPACEALARM = 'spacealarm'
|
|
|
|
|
TUGBOAT = 'tugboat'
|
|
|
|
|
ALIEN = 'alien'
|
|
|
|
|
CLIMB = 'climb'
|
|
|
|
|
PERSISTENT = 'persistent'
|
|
|
|
|
ECHO = 'echo'
|
|
|
|
|
UPDOWN = 'updown'
|
|
|
|
|
NONE = 'none'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PUSHOVER_SOUNDS = (
|
|
|
|
|
PushoverSound.PUSHOVER,
|
|
|
|
|
PushoverSound.BIKE,
|
|
|
|
|
PushoverSound.BUGLE,
|
|
|
|
|
PushoverSound.CASHREGISTER,
|
|
|
|
|
PushoverSound.CLASSICAL,
|
|
|
|
|
PushoverSound.COSMIC,
|
|
|
|
|
PushoverSound.FALLING,
|
|
|
|
|
PushoverSound.GAMELAN,
|
|
|
|
|
PushoverSound.INCOMING,
|
|
|
|
|
PushoverSound.INTERMISSION,
|
|
|
|
|
PushoverSound.MAGIC,
|
|
|
|
|
PushoverSound.MECHANICAL,
|
|
|
|
|
PushoverSound.PIANOBAR,
|
|
|
|
|
PushoverSound.SIREN,
|
|
|
|
|
PushoverSound.SPACEALARM,
|
|
|
|
|
PushoverSound.TUGBOAT,
|
|
|
|
|
PushoverSound.ALIEN,
|
|
|
|
|
PushoverSound.CLIMB,
|
|
|
|
|
PushoverSound.PERSISTENT,
|
|
|
|
|
PushoverSound.ECHO,
|
|
|
|
|
PushoverSound.UPDOWN,
|
|
|
|
|
PushoverSound.NONE,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
PUSHOVER_PRIORITIES = (
|
|
|
|
|
PushoverPriority.LOW,
|
|
|
|
|
PushoverPriority.MODERATE,
|
|
|
|
@ -89,7 +141,11 @@ class NotifyPushover(NotifyBase):
|
|
|
|
|
# The maximum allowable characters allowed in the body per message
|
|
|
|
|
body_maxlen = 512
|
|
|
|
|
|
|
|
|
|
def __init__(self, token, targets=None, priority=None, **kwargs):
|
|
|
|
|
# Default Pushover sound
|
|
|
|
|
default_pushover_sound = PushoverSound.PUSHOVER
|
|
|
|
|
|
|
|
|
|
def __init__(self, token, targets=None, priority=None, sound=None,
|
|
|
|
|
**kwargs):
|
|
|
|
|
"""
|
|
|
|
|
Initialize Pushover Object
|
|
|
|
|
"""
|
|
|
|
@ -114,6 +170,14 @@ class NotifyPushover(NotifyBase):
|
|
|
|
|
if len(self.targets) == 0:
|
|
|
|
|
self.targets = (PUSHOVER_SEND_TO_ALL, )
|
|
|
|
|
|
|
|
|
|
# Setup our sound
|
|
|
|
|
self.sound = NotifyPushover.default_pushover_sound \
|
|
|
|
|
if not isinstance(sound, six.string_types) else sound.lower()
|
|
|
|
|
if self.sound and self.sound not in PUSHOVER_SOUNDS:
|
|
|
|
|
msg = 'The sound specified ({}) is invalid.'.format(sound)
|
|
|
|
|
self.logger.warning(msg)
|
|
|
|
|
raise TypeError(msg)
|
|
|
|
|
|
|
|
|
|
# The Priority of the message
|
|
|
|
|
if priority not in PUSHOVER_PRIORITIES:
|
|
|
|
|
self.priority = PushoverPriority.NORMAL
|
|
|
|
@ -167,6 +231,7 @@ class NotifyPushover(NotifyBase):
|
|
|
|
|
'title': title,
|
|
|
|
|
'message': body,
|
|
|
|
|
'device': device,
|
|
|
|
|
'sound': self.sound,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self.logger.debug('Pushover POST URL: %s (cert_verify=%r)' % (
|
|
|
|
@ -297,6 +362,11 @@ class NotifyPushover(NotifyBase):
|
|
|
|
|
# Retrieve all of our targets
|
|
|
|
|
results['targets'] = NotifyPushover.split_path(results['fullpath'])
|
|
|
|
|
|
|
|
|
|
# Get the sound
|
|
|
|
|
if 'sound' in results['qsd'] and len(results['qsd']['sound']):
|
|
|
|
|
results['sound'] = \
|
|
|
|
|
NotifyPushover.unquote(results['qsd']['sound'])
|
|
|
|
|
|
|
|
|
|
# The 'to' makes it easier to use yaml configuration
|
|
|
|
|
if 'to' in results['qsd'] and len(results['qsd']['to']):
|
|
|
|
|
results['targets'] += \
|
|
|
|
|