diff --git a/.gitignore b/.gitignore index b0986195..d1c30d37 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,6 @@ target/ #Ipython Notebook .ipynb_checkpoints + +#PyCharm +.idea diff --git a/apprise/plugins/NotifyBase.py b/apprise/plugins/NotifyBase.py index ab7114f0..a8471f83 100644 --- a/apprise/plugins/NotifyBase.py +++ b/apprise/plugins/NotifyBase.py @@ -162,6 +162,7 @@ class NotifyBase(object): self.user = kwargs.get('user') self.password = kwargs.get('password') + self.headers = kwargs.get('headers') if 'format' in kwargs: # Store the specified format if specified @@ -424,4 +425,6 @@ class NotifyBase(object): if 'user' in results['qsd']: results['user'] = results['qsd']['user'] + results['headers'] = {k[1:]: v for k, v in results['qsd'].items() + if re.match(r'^-.', k)} return results diff --git a/apprise/plugins/NotifyDiscord.py b/apprise/plugins/NotifyDiscord.py index 4d80f613..7cdf283c 100644 --- a/apprise/plugins/NotifyDiscord.py +++ b/apprise/plugins/NotifyDiscord.py @@ -181,7 +181,7 @@ class NotifyDiscord(NotifyBase): else: # not markdown payload['content'] = body if not title \ - else "{}\r\n{}".format(title, body) + else "{}\r\n{}".format(title, body) if self.avatar and image_url: payload['avatar_url'] = image_url @@ -298,7 +298,7 @@ class NotifyDiscord(NotifyBase): """ regex = re.compile( r'^\s*#+\s*(?P[^#\n]+)([ \r\t\v#])?' - r'(?P([^ \r\t\v#].+?)(\n(?!\s#))|\s*$)', flags=re.S|re.M) + r'(?P([^ \r\t\v#].+?)(\n(?!\s#))|\s*$)', flags=re.S | re.M) common = regex.finditer(markdown) fields = list() diff --git a/apprise/plugins/NotifyJSON.py b/apprise/plugins/NotifyJSON.py index 2501ee0a..ba160e92 100644 --- a/apprise/plugins/NotifyJSON.py +++ b/apprise/plugins/NotifyJSON.py @@ -91,6 +91,9 @@ class NotifyJSON(NotifyBase): 'Content-Type': 'application/json' } + if self.headers: + headers.update(self.headers) + auth = None if self.user: auth = (self.user, self.password) diff --git a/apprise/plugins/NotifySNS.py b/apprise/plugins/NotifySNS.py index 64071d45..abc46f42 100644 --- a/apprise/plugins/NotifySNS.py +++ b/apprise/plugins/NotifySNS.py @@ -58,8 +58,8 @@ LIST_DELIM = re.compile(r'[ \t\r\n,\\/]+') # region as a delimiter. This is a bit hacky; but it's much easier than having # users of this product search though this Access Key Secret and escape all # of the forward slashes! -IS_REGION = re.compile( - r'^\s*(?P[a-z]{2})-(?P[a-z]+)-(?P[0-9]+)\s*$', re.I) +IS_REGION = re.compile(r'^\s*(?P[a-z]{2})-' + r'(?P[a-z]+)-(?P[0-9]+)\s*$', re.I) # Extend HTTP Error Messages AWS_HTTP_ERROR_MAP = HTTP_ERROR_MAP.copy() diff --git a/apprise/plugins/NotifyXML.py b/apprise/plugins/NotifyXML.py index 24940133..9b2f36b2 100644 --- a/apprise/plugins/NotifyXML.py +++ b/apprise/plugins/NotifyXML.py @@ -96,6 +96,9 @@ class NotifyXML(NotifyBase): 'Content-Type': 'application/xml' } + if self.headers: + headers.update(self.headers) + re_map = { '{MESSAGE_TYPE}': NotifyBase.quote(notify_type), '{SUBJECT}': NotifyBase.quote(title), diff --git a/test/test_notify_base.py b/test/test_notify_base.py index 01d809b9..dc3ee937 100644 --- a/test/test_notify_base.py +++ b/test/test_notify_base.py @@ -166,6 +166,12 @@ def test_notify_base_urls(): assert 'password' in results assert results['password'] == "newpassword" + # pass headers + results = NotifyBase.parse_url( + 'https://localhost:8080?-HeaderKey=HeaderValue') + assert 'headerkey' in results['headers'] + assert results['headers']['headerkey'] == 'HeaderValue' + # User Handling # user keyword over-rides default password diff --git a/test/test_rest_plugins.py b/test/test_rest_plugins.py index 2984973d..bee5fbea 100644 --- a/test/test_rest_plugins.py +++ b/test/test_rest_plugins.py @@ -431,6 +431,10 @@ TEST_URLS = ( # is set and tests that we gracfully handle them 'test_requests_exceptions': True, }), + ('json://localhost:8080/path?-HeaderKey=HeaderValue', { + 'instance': plugins.NotifyJSON, + }), + ################################## # NotifyKODI @@ -1470,6 +1474,9 @@ TEST_URLS = ( # is set and tests that we gracfully handle them 'test_requests_exceptions': True, }), + ('xml://localhost:8080/path?-HeaderKey=HeaderValue', { + 'instance': plugins.NotifyXML, + }), )