mirror of
https://github.com/caronc/apprise.git
synced 2024-11-22 16:13:12 +01:00
Removal of palot:// as service is no longer available; refs #46
This commit is contained in:
parent
042c5ed2da
commit
fa6e34eb86
@ -43,7 +43,6 @@ The table below identifies the services this tool supports and some example serv
|
||||
| [Matrix](https://github.com/caronc/apprise/wiki/Notify_matrix) | matrix:// | (TCP) 443 | matrix://token<br />matrix://user@token<br />matrixs://token?mode=slack<br />matrixs://user@token
|
||||
| [Mattermost](https://github.com/caronc/apprise/wiki/Notify_mattermost) | mmost:// | (TCP) 8065 | mmost://hostname/authkey<br />mmost://hostname:80/authkey<br />mmost://user@hostname:80/authkey<br />mmost://hostname/authkey?channel=channel<br />mmosts://hostname/authkey<br />mmosts://user@hostname/authkey<br />
|
||||
| [Prowl](https://github.com/caronc/apprise/wiki/Notify_prowl) | prowl:// | (TCP) 443 | prowl://apikey<br />prowl://apikey/providerkey
|
||||
| [Pushalot](https://github.com/caronc/apprise/wiki/Notify_pushalot) | palot:// | (TCP) 443 | palot://authorizationtoken
|
||||
| [PushBullet](https://github.com/caronc/apprise/wiki/Notify_pushbullet) | pbul:// | (TCP) 443 | pbul://accesstoken<br />pbul://accesstoken/#channel<br/>pbul://accesstoken/A_DEVICE_ID<br />pbul://accesstoken/email@address.com<br />pbul://accesstoken/#channel/#channel2/email@address.net/DEVICE
|
||||
| [Pushjet](https://github.com/caronc/apprise/wiki/Notify_pushjet) | pjet:// | (TCP) 80 | pjet://secret<br />pjet://secret@hostname<br />pjet://secret@hostname:port<br />pjets://secret@hostname<br />pjets://secret@hostname:port<br /><i>Note: if no hostname defined https://api.pushjet.io will be used
|
||||
| [Pushover](https://github.com/caronc/apprise/wiki/Notify_pushover) | pover:// | (TCP) 443 | pover://user@token<br />pover://user@token/DEVICE<br />pover://user@token/DEVICE1/DEVICE2/DEVICEN<br />_Note: you must specify both your user_id and token_
|
||||
|
@ -1,168 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2019 Chris Caron <lead2gold@gmail.com>
|
||||
# All rights reserved.
|
||||
#
|
||||
# This code is licensed under the MIT License.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files(the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions :
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
import re
|
||||
import requests
|
||||
from json import dumps
|
||||
|
||||
from .NotifyBase import NotifyBase
|
||||
from .NotifyBase import HTTP_ERROR_MAP
|
||||
from ..common import NotifyImageSize
|
||||
|
||||
# Extend HTTP Error Messages
|
||||
PUSHALOT_HTTP_ERROR_MAP = HTTP_ERROR_MAP.copy()
|
||||
PUSHALOT_HTTP_ERROR_MAP.update({
|
||||
406: 'Message throttle limit hit.',
|
||||
410: 'AuthorizedToken is no longer valid.',
|
||||
})
|
||||
|
||||
# Used to validate Authorization Token
|
||||
VALIDATE_AUTHTOKEN = re.compile(r'[A-Za-z0-9]{32}')
|
||||
|
||||
|
||||
class NotifyPushalot(NotifyBase):
|
||||
"""
|
||||
A wrapper for Pushalot Notifications
|
||||
"""
|
||||
|
||||
# The default descriptive name associated with the Notification
|
||||
service_name = 'Pushalot'
|
||||
|
||||
# The services URL
|
||||
service_url = 'https://pushalot.com/'
|
||||
|
||||
# The default protocol is always secured
|
||||
secure_protocol = 'palot'
|
||||
|
||||
# A URL that takes you to the setup/help of the specific protocol
|
||||
setup_url = 'https://github.com/caronc/apprise/wiki/Notify_pushalot'
|
||||
|
||||
# Pushalot uses the http protocol with JSON requests
|
||||
notify_url = 'https://pushalot.com/api/sendmessage'
|
||||
|
||||
# Allows the user to specify the NotifyImageSize object
|
||||
image_size = NotifyImageSize.XY_72
|
||||
|
||||
def __init__(self, authtoken, is_important=False, **kwargs):
|
||||
"""
|
||||
Initialize Pushalot Object
|
||||
"""
|
||||
super(NotifyPushalot, self).__init__(**kwargs)
|
||||
|
||||
# Is Important Flag
|
||||
self.is_important = is_important
|
||||
|
||||
self.authtoken = authtoken
|
||||
# Validate authtoken
|
||||
if not VALIDATE_AUTHTOKEN.match(authtoken):
|
||||
self.logger.warning(
|
||||
'Invalid Pushalot Authorization Token Specified.'
|
||||
)
|
||||
raise TypeError(
|
||||
'Invalid Pushalot Authorization Token Specified.'
|
||||
)
|
||||
|
||||
def notify(self, title, body, notify_type, **kwargs):
|
||||
"""
|
||||
Perform Pushalot Notification
|
||||
"""
|
||||
|
||||
headers = {
|
||||
'User-Agent': self.app_id,
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
|
||||
# prepare JSON Object
|
||||
payload = {
|
||||
'AuthorizationToken': self.authtoken,
|
||||
'IsImportant': self.is_important,
|
||||
'Title': title,
|
||||
'Body': body,
|
||||
'Source': self.app_id,
|
||||
}
|
||||
|
||||
image_url = self.image_url(notify_type)
|
||||
if image_url:
|
||||
payload['Image'] = image_url
|
||||
|
||||
self.logger.debug('Pushalot POST URL: %s (cert_verify=%r)' % (
|
||||
self.notify_url, self.verify_certificate,
|
||||
))
|
||||
self.logger.debug('Pushalot Payload: %s' % str(payload))
|
||||
try:
|
||||
r = requests.post(
|
||||
self.notify_url,
|
||||
data=dumps(payload),
|
||||
headers=headers,
|
||||
verify=self.verify_certificate,
|
||||
)
|
||||
|
||||
if r.status_code != requests.codes.ok:
|
||||
# We had a problem
|
||||
try:
|
||||
self.logger.warning(
|
||||
'Failed to send Pushalot notification: '
|
||||
'%s (error=%s).' % (
|
||||
PUSHALOT_HTTP_ERROR_MAP[r.status_code],
|
||||
r.status_code))
|
||||
|
||||
except KeyError:
|
||||
self.logger.warning(
|
||||
'Failed to send Pushalot notification '
|
||||
'(error=%s).' % r.status_code)
|
||||
|
||||
# Return; we're done
|
||||
return False
|
||||
|
||||
else:
|
||||
self.logger.info('Sent Pushalot notification.')
|
||||
|
||||
except requests.RequestException as e:
|
||||
self.logger.warning(
|
||||
'A Connection error occured sending Pushalot notification.')
|
||||
self.logger.debug('Socket Exception: %s' % str(e))
|
||||
|
||||
# Return; we're done
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def parse_url(url):
|
||||
"""
|
||||
Parses the URL and returns enough arguments that can allow
|
||||
us to substantiate this object.
|
||||
|
||||
"""
|
||||
results = NotifyBase.parse_url(url)
|
||||
|
||||
if not results:
|
||||
# We're done early as we couldn't load the results
|
||||
return results
|
||||
|
||||
# Apply our settings now
|
||||
results['authtoken'] = results['host']
|
||||
|
||||
return results
|
@ -40,7 +40,6 @@ from .NotifyJSON import NotifyJSON
|
||||
from .NotifyMatrix import NotifyMatrix
|
||||
from .NotifyMatterMost import NotifyMatterMost
|
||||
from .NotifyProwl import NotifyProwl
|
||||
from .NotifyPushalot import NotifyPushalot
|
||||
from .NotifyPushBullet import NotifyPushBullet
|
||||
from .NotifyPushjet.NotifyPushjet import NotifyPushjet
|
||||
from .NotifyPushover import NotifyPushover
|
||||
@ -68,7 +67,7 @@ __all__ = [
|
||||
'NotifyBoxcar', 'NotifyEmail', 'NotifyEmby', 'NotifyDiscord',
|
||||
'NotifyFaast', 'NotifyGnome', 'NotifyGrowl', 'NotifyIFTTT', 'NotifyJoin',
|
||||
'NotifyJSON', 'NotifyMatrix', 'NotifyMatterMost', 'NotifyProwl',
|
||||
'NotifyPushalot', 'NotifyPushBullet', 'NotifyPushjet', 'NotifyPushover',
|
||||
'NotifyPushBullet', 'NotifyPushjet', 'NotifyPushover',
|
||||
'NotifyRocketChat', 'NotifySlack', 'NotifyStride', 'NotifyToasty',
|
||||
'NotifyTwitter', 'NotifyTelegram', 'NotifyXBMC', 'NotifyXML',
|
||||
'NotifyWindows',
|
||||
|
@ -65,19 +65,18 @@ def test_apprise():
|
||||
servers = [
|
||||
'faast://abcdefghijklmnop-abcdefg',
|
||||
'kodi://kodi.server.local',
|
||||
'palot://1f418df7577e32b89ac6511f2eb9aa68',
|
||||
]
|
||||
|
||||
a = Apprise(servers=servers)
|
||||
|
||||
# 3 servers loaded
|
||||
assert(len(a) == 3)
|
||||
assert(len(a) == 2)
|
||||
|
||||
# We can add another server
|
||||
assert(
|
||||
a.add('mmosts://mattermost.server.local/'
|
||||
'3ccdd113474722377935511fc85d3dd4') is True)
|
||||
assert(len(a) == 4)
|
||||
assert(len(a) == 3)
|
||||
|
||||
# We can empty our set
|
||||
a.clear()
|
||||
|
@ -744,50 +744,6 @@ TEST_URLS = (
|
||||
'test_requests_exceptions': True,
|
||||
}),
|
||||
|
||||
##################################
|
||||
# NotifyPushalot
|
||||
##################################
|
||||
('palot://', {
|
||||
'instance': None,
|
||||
}),
|
||||
# AuthToken
|
||||
('palot://%s' % ('a' * 32), {
|
||||
'instance': plugins.NotifyPushalot,
|
||||
}),
|
||||
# AuthToken, no image
|
||||
('palot://%s' % ('a' * 32), {
|
||||
'instance': plugins.NotifyPushalot,
|
||||
# don't include an image by default
|
||||
'include_image': False,
|
||||
}),
|
||||
# Invalid AuthToken
|
||||
('palot://%s' % ('a' * 24), {
|
||||
# Missing a channel
|
||||
'instance': TypeError,
|
||||
}),
|
||||
# AuthToken + bad url
|
||||
('palot://:@/', {
|
||||
'instance': None,
|
||||
}),
|
||||
('palot://%s' % ('a' * 32), {
|
||||
'instance': plugins.NotifyPushalot,
|
||||
# force a failure
|
||||
'response': False,
|
||||
'requests_response_code': requests.codes.internal_server_error,
|
||||
}),
|
||||
('palot://%s' % ('a' * 32), {
|
||||
'instance': plugins.NotifyPushalot,
|
||||
# throw a bizzare code forcing us to fail to look it up
|
||||
'response': False,
|
||||
'requests_response_code': 999,
|
||||
}),
|
||||
('palot://%s' % ('a' * 32), {
|
||||
'instance': plugins.NotifyPushalot,
|
||||
# Throws a series of connection and transfer exceptions when this flag
|
||||
# is set and tests that we gracfully handle them
|
||||
'test_requests_exceptions': True,
|
||||
}),
|
||||
|
||||
##################################
|
||||
# NotifyPushBullet
|
||||
##################################
|
||||
|
Loading…
Reference in New Issue
Block a user