Deprication Cleanup and Code Tidy (#593)

This commit is contained in:
Chris Caron 2022-05-29 22:19:29 -04:00 committed by GitHub
parent 6ac9c1d89a
commit 9ef8e72952
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 83 additions and 126 deletions

View File

@ -6,8 +6,8 @@
## New Service Completion Status ## New Service Completion Status
<!-- This section is only applicable if you're adding a new service --> <!-- This section is only applicable if you're adding a new service -->
* [ ] apprise/plugins/Notify<!--ServiceName goes here-->.py * [ ] apprise/plugins/Notify<!--ServiceName goes here-->.py
* [ ] setup.py * [ ] KEYWORDS
- add new service into the `KEYWORDS` file located in the root directory - add new service into this file (alphabetically).
* [ ] README.md * [ ] README.md
- add entry for new service to table (as a quick reference) - add entry for new service to table (as a quick reference)
* [ ] packaging/redhat/python-apprise.spec * [ ] packaging/redhat/python-apprise.spec
@ -37,7 +37,7 @@ source bin/activate
# Install the branch # Install the branch
pip install git+https://github.com/caronc/apprise.git@<this.branch-name> pip install git+https://github.com/caronc/apprise.git@<this.branch-name>
# Be sure you're running your Signal API Server and query it like so # Test out the changes with the following command:
apprise -t "Test Title" -b "Test Message" \ apprise -t "Test Title" -b "Test Message" \
<apprise url related to ticket> <apprise url related to ticket>

View File

@ -24,3 +24,6 @@ The contributors have been listed in chronological order:
* Andreas Motl <andreas@getkotori.org> * Andreas Motl <andreas@getkotori.org>
* Mar 2020 - Fix XMPP Support * Mar 2020 - Fix XMPP Support
* Joey Espinosa <@particledecay>
* Apr 3rd 2022 - Added Ntfy Support

View File

@ -339,18 +339,10 @@ class NotifyAppriseAPI(NotifyBase):
return results return results
# Add our headers that the user can potentially over-ride if they wish # Add our headers that the user can potentially over-ride if they wish
# to to our returned result set # to to our returned result set and tidy entries by unquoting them
results['headers'] = results['qsd+']
if results['qsd-']:
results['headers'].update(results['qsd-'])
NotifyBase.logger.deprecate(
"minus (-) based Apprise API header tokens are being "
" removed; use the plus (+) symbol instead.")
# Tidy our header entries by unquoting them
results['headers'] = \ results['headers'] = \
{NotifyAppriseAPI.unquote(x): NotifyAppriseAPI.unquote(y) {NotifyAppriseAPI.unquote(x): NotifyAppriseAPI.unquote(y)
for x, y in results['headers'].items()} for x, y in results['qsd+'].items()}
# Support the passing of tags in the URL # Support the passing of tags in the URL
if 'tags' in results['qsd'] and len(results['qsd']['tags']): if 'tags' in results['qsd'] and len(results['qsd']['tags']):

View File

@ -357,13 +357,8 @@ class NotifyBoxcar(NotifyBase):
# by default # by default
entries = NotifyBoxcar.split_path(results['fullpath']) entries = NotifyBoxcar.split_path(results['fullpath'])
try: # Now fetch the remaining tokens
# Now fetch the remaining tokens results['secret'] = entries.pop(0) if entries else None
results['secret'] = entries.pop(0)
except IndexError:
# secret wasn't specified
results['secret'] = None
# Our recipients make up the remaining entries of our array # Our recipients make up the remaining entries of our array
results['targets'] = entries results['targets'] = entries

View File

@ -901,13 +901,6 @@ class NotifyEmail(NotifyBase):
# Extract from name to associate with from address # Extract from name to associate with from address
results['from_name'] = NotifyEmail.unquote(results['qsd']['name']) results['from_name'] = NotifyEmail.unquote(results['qsd']['name'])
if 'timeout' in results['qsd'] and len(results['qsd']['timeout']):
# Deprecated in favor of cto= flag
NotifyBase.logger.deprecate(
"timeout= argument is deprecated; use cto= instead.")
results['qsd']['cto'] = results['qsd']['timeout']
del results['qsd']['timeout']
# Store SMTP Host if specified # Store SMTP Host if specified
if 'smtp' in results['qsd'] and len(results['qsd']['smtp']): if 'smtp' in results['qsd'] and len(results['qsd']['smtp']):
# Extract the smtp server # Extract the smtp server

View File

@ -337,18 +337,10 @@ class NotifyEnigma2(NotifyBase):
return results return results
# Add our headers that the user can potentially over-ride if they wish # Add our headers that the user can potentially over-ride if they wish
# to to our returned result set # to to our returned result set and tidy entries by unquoting them
results['headers'] = results['qsd+']
if results['qsd-']:
results['headers'].update(results['qsd-'])
NotifyBase.logger.deprecate(
"minus (-) based Enigma header tokens are being "
" removed; use the plus (+) symbol instead.")
# Tidy our header entries by unquoting them
results['headers'] = { results['headers'] = {
NotifyEnigma2.unquote(x): NotifyEnigma2.unquote(y) NotifyEnigma2.unquote(x): NotifyEnigma2.unquote(y)
for x, y in results['headers'].items()} for x, y in results['qsd+'].items()}
# Save timeout value (if specified) # Save timeout value (if specified)
if 'timeout' in results['qsd'] and len(results['qsd']['timeout']): if 'timeout' in results['qsd'] and len(results['qsd']['timeout']):

View File

@ -374,17 +374,9 @@ class NotifyForm(NotifyBase):
for x, y in results['qsd:'].items()} for x, y in results['qsd:'].items()}
# Add our headers that the user can potentially over-ride if they wish # Add our headers that the user can potentially over-ride if they wish
# to to our returned result set # to to our returned result set and tidy entries by unquoting them
results['headers'] = results['qsd+']
if results['qsd-']:
results['headers'].update(results['qsd-'])
NotifyBase.logger.deprecate(
"minus (-) based Form header tokens are being "
" removed; use the plus (+) symbol instead.")
# Tidy our header entries by unquoting them
results['headers'] = {NotifyForm.unquote(x): NotifyForm.unquote(y) results['headers'] = {NotifyForm.unquote(x): NotifyForm.unquote(y)
for x, y in results['headers'].items()} for x, y in results['qsd+'].items()}
# Set method if not otherwise set # Set method if not otherwise set
if 'method' in results['qsd'] and len(results['qsd']['method']): if 'method' in results['qsd'] and len(results['qsd']['method']):

View File

@ -361,17 +361,9 @@ class NotifyJSON(NotifyBase):
for x, y in results['qsd:'].items()} for x, y in results['qsd:'].items()}
# Add our headers that the user can potentially over-ride if they wish # Add our headers that the user can potentially over-ride if they wish
# to to our returned result set # to to our returned result set and tidy entries by unquoting them
results['headers'] = results['qsd+']
if results['qsd-']:
results['headers'].update(results['qsd-'])
NotifyBase.logger.deprecate(
"minus (-) based JSON header tokens are being "
" removed; use the plus (+) symbol instead.")
# Tidy our header entries by unquoting them
results['headers'] = {NotifyJSON.unquote(x): NotifyJSON.unquote(y) results['headers'] = {NotifyJSON.unquote(x): NotifyJSON.unquote(y)
for x, y in results['headers'].items()} for x, y in results['qsd+'].items()}
# Set method if not otherwise set # Set method if not otherwise set
if 'method' in results['qsd'] and len(results['qsd']['method']): if 'method' in results['qsd'] and len(results['qsd']['method']):

View File

@ -331,13 +331,10 @@ class NotifyNextcloud(NotifyBase):
results['version'] = \ results['version'] = \
NotifyNextcloud.unquote(results['qsd']['version']) NotifyNextcloud.unquote(results['qsd']['version'])
# Add our headers that the user can potentially over-ride if they # Add our headers that the user can potentially over-ride if they wish
# wish to to our returned result set # to to our returned result set and tidy entries by unquoting them
results['headers'] = results['qsd+'] results['headers'] = {
if results['qsd-']: NotifyNextcloud.unquote(x): NotifyNextcloud.unquote(y)
results['headers'].update(results['qsd-']) for x, y in results['qsd+'].items()}
NotifyBase.logger.deprecate(
"minus (-) based Nextcloud header tokens are being "
" removed; use the plus (+) symbol instead.")
return results return results

View File

@ -269,13 +269,10 @@ class NotifyNextcloudTalk(NotifyBase):
results['targets'] = \ results['targets'] = \
NotifyNextcloudTalk.split_path(results['fullpath']) NotifyNextcloudTalk.split_path(results['fullpath'])
# Add our headers that the user can potentially over-ride if they # Add our headers that the user can potentially over-ride if they wish
# wish to to our returned result set # to to our returned result set and tidy entries by unquoting them
results['headers'] = results['qsd+'] results['headers'] = {
if results['qsd-']: NotifyNextcloudTalk.unquote(x): NotifyNextcloudTalk.unquote(y)
results['headers'].update(results['qsd-']) for x, y in results['qsd+'].items()}
NotifyBase.logger.deprecate(
"minus (-) based Nextcloud Talk header tokens are being "
" removed; use the plus (+) symbol instead.")
return results return results

View File

@ -364,13 +364,11 @@ class NotifyNotica(NotifyBase):
'/' if not entries else '/{}/'.format('/'.join(entries)) '/' if not entries else '/{}/'.format('/'.join(entries))
# Add our headers that the user can potentially over-ride if they # Add our headers that the user can potentially over-ride if they
# wish to to our returned result set # wish to to our returned result set and tidy entries by unquoting
results['headers'] = results['qsd+'] # them
if results['qsd-']: results['headers'] = {
results['headers'].update(results['qsd-']) NotifyNotica.unquote(x): NotifyNotica.unquote(y)
NotifyBase.logger.deprecate( for x, y in results['qsd+'].items()}
"minus (-) based Notica header tokens are being "
" removed; use the plus (+) symbol instead.")
return results return results

View File

@ -1,24 +1,31 @@
# MIT License # -*- coding: utf-8 -*-
#
# Copyright (c) 2022 Joey Espinosa <@particledecay> # Copyright (C) 2022 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 # Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal # of this software and associated documentation files(the "Software"), to deal
# in the Software without restriction, including without limitation the rights # in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
# copies of the Software, and to permit persons to whom the Software is # copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions: # furnished to do so, subject to the following conditions :
#
# The above copyright notice and this permission notice shall be included in # The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software. # all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # 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 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# SOFTWARE. # THE SOFTWARE.
# Great sources
# - https://github.com/matrix-org/matrix-python-sdk
# - https://github.com/matrix-org/synapse/blob/master/docs/reverse_proxy.rst
# #
# Examples: # Examples:
# ntfys://my-topic # ntfys://my-topic

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2021 <example@example.com> # Copyright (C) 2021 Chris Caron <lead2gold@gmail.com>
# All rights reserved. # All rights reserved.
# #
# This code is licensed under the MIT License. # This code is licensed under the MIT License.

View File

@ -414,17 +414,9 @@ class NotifyXML(NotifyBase):
for x, y in results['qsd:'].items()} for x, y in results['qsd:'].items()}
# Add our headers that the user can potentially over-ride if they wish # Add our headers that the user can potentially over-ride if they wish
# to to our returned result set # to to our returned result set and tidy entries by unquoting them
results['headers'] = results['qsd+']
if results['qsd-']:
results['headers'].update(results['qsd-'])
NotifyBase.logger.deprecate(
"minus (-) based XML header tokens are being "
"removed; use the plus (+) symbol instead.")
# Tidy our header entries by unquoting them
results['headers'] = {NotifyXML.unquote(x): NotifyXML.unquote(y) results['headers'] = {NotifyXML.unquote(x): NotifyXML.unquote(y)
for x, y in results['headers'].items()} for x, y in results['qsd+'].items()}
# Set method if not otherwise set # Set method if not otherwise set
if 'method' in results['qsd'] and len(results['qsd']['method']): if 'method' in results['qsd'] and len(results['qsd']['method']):

View File

@ -1,4 +1,27 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#
# Copyright (C) 2022 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 ssl import ssl
from os.path import isfile from os.path import isfile

View File

@ -132,7 +132,7 @@ apprise_url_tests = (
# Our expected url(privacy=True) startswith() response: # Our expected url(privacy=True) startswith() response:
'privacy_url': 'apprises://user:****@localhost:8080/m...5/', 'privacy_url': 'apprises://user:****@localhost:8080/m...5/',
}), }),
('apprises://localhost:8080/path?-HeaderKey=HeaderValue', { ('apprises://localhost:8080/path?+HeaderKey=HeaderValue', {
'instance': plugins.NotifyAppriseAPI, 'instance': plugins.NotifyAppriseAPI,
}), }),
('apprise://localhost/%s' % ('a' * 32), { ('apprise://localhost/%s' % ('a' * 32), {

View File

@ -112,7 +112,7 @@ apprise_url_tests = (
# Our expected url(privacy=True) startswith() response: # Our expected url(privacy=True) startswith() response:
'privacy_url': 'forms://user:****@localhost:8080', 'privacy_url': 'forms://user:****@localhost:8080',
}), }),
('form://localhost:8080/path?-HeaderKey=HeaderValue', { ('form://localhost:8080/path?+HeaderKey=HeaderValue', {
'instance': plugins.NotifyForm, 'instance': plugins.NotifyForm,
}), }),
('form://user:pass@localhost:8081', { ('form://user:pass@localhost:8081', {

View File

@ -100,7 +100,7 @@ apprise_url_tests = (
# Our expected url(privacy=True) startswith() response: # Our expected url(privacy=True) startswith() response:
'privacy_url': 'jsons://user:****@localhost:8080', 'privacy_url': 'jsons://user:****@localhost:8080',
}), }),
('json://localhost:8080/path?-HeaderKey=HeaderValue', { ('json://localhost:8080/path?+HeaderKey=HeaderValue', {
'instance': plugins.NotifyJSON, 'instance': plugins.NotifyJSON,
}), }),
('json://user:pass@localhost:8081', { ('json://user:pass@localhost:8081', {

View File

@ -125,7 +125,7 @@ apprise_url_tests = (
('xmls://user:pass@localhost:8080', { ('xmls://user:pass@localhost:8080', {
'instance': plugins.NotifyXML, 'instance': plugins.NotifyXML,
}), }),
('xml://localhost:8080/path?-HeaderKey=HeaderValue', { ('xml://localhost:8080/path?+HeaderKey=HeaderValue', {
'instance': plugins.NotifyXML, 'instance': plugins.NotifyXML,
}), }),
('xml://user:pass@localhost:8081', { ('xml://user:pass@localhost:8081', {

View File

@ -113,18 +113,6 @@ TEST_URLS = (
('mailtos://user:pass@nuxref.com:567/l2g@nuxref.com', { ('mailtos://user:pass@nuxref.com:567/l2g@nuxref.com', {
'instance': plugins.NotifyEmail, 'instance': plugins.NotifyEmail,
}), }),
(
'mailtos://user:pass@example.com?smtp=smtp.example.com&timeout=5'
'&name=l2g&from=noreply@example.com', {
'instance': plugins.NotifyEmail,
},
),
('mailto://user:pass@example.com?timeout=invalid.entry', {
'instance': plugins.NotifyEmail,
}),
('mailto://user:pass@example.com?timeout=invalid.entry', {
'instance': plugins.NotifyEmail,
}),
( (
'mailto://user:pass@example.com:2525?user=l2g@example.com' 'mailto://user:pass@example.com:2525?user=l2g@example.com'
'&pass=l2g@apprise!is!Awesome', { '&pass=l2g@apprise!is!Awesome', {

View File

@ -144,7 +144,7 @@ apprise_url_tests = (
'result': True 'result': True
}, },
}), }),
('enigma2://localhost:8080/path?-HeaderKey=HeaderValue', { ('enigma2://localhost:8080/path?+HeaderKey=HeaderValue', {
'instance': plugins.NotifyEnigma2, 'instance': plugins.NotifyEnigma2,
'requests_response_text': { 'requests_response_text': {
'result': True 'result': True

View File

@ -96,7 +96,7 @@ apprise_url_tests = (
('nclouds://user:pass@localhost:8080/admin/', { ('nclouds://user:pass@localhost:8080/admin/', {
'instance': plugins.NotifyNextcloud, 'instance': plugins.NotifyNextcloud,
}), }),
('ncloud://localhost:8080/admin?-HeaderKey=HeaderValue', { ('ncloud://localhost:8080/admin?+HeaderKey=HeaderValue', {
'instance': plugins.NotifyNextcloud, 'instance': plugins.NotifyNextcloud,
}), }),
('ncloud://user:pass@localhost:8081/admin', { ('ncloud://user:pass@localhost:8081/admin', {

View File

@ -85,7 +85,7 @@ apprise_url_tests = (
'instance': plugins.NotifyNextcloudTalk, 'instance': plugins.NotifyNextcloudTalk,
'requests_response_code': requests.codes.created, 'requests_response_code': requests.codes.created,
}), }),
('nctalk://user:pass@localhost:8080/roomid?-HeaderKey=HeaderValue', { ('nctalk://user:pass@localhost:8080/roomid?+HeaderKey=HeaderValue', {
'instance': plugins.NotifyNextcloudTalk, 'instance': plugins.NotifyNextcloudTalk,
'requests_response_code': requests.codes.created, 'requests_response_code': requests.codes.created,
}), }),

View File

@ -110,10 +110,6 @@ apprise_url_tests = (
('notica://localhost:8080//%s/?+HeaderKey=HeaderValue' % ('7' * 6), { ('notica://localhost:8080//%s/?+HeaderKey=HeaderValue' % ('7' * 6), {
'instance': plugins.NotifyNotica, 'instance': plugins.NotifyNotica,
}), }),
# Test Depricated Header overrides
('notica://localhost:8080//%s/?-HeaderKey=HeaderValue' % ('7' * 6), {
'instance': plugins.NotifyNotica,
}),
('notica://%s' % ('c' * 6), { ('notica://%s' % ('c' * 6), {
'instance': plugins.NotifyNotica, 'instance': plugins.NotifyNotica,
# force a failure # force a failure