Add ability to send attachments in pushover notifications (#24806)
* Added ability to send attachments in pushover notifications * Added full name for exception to satisfy static check * Fixed hanging indent lint problem * Added path checking, removed import re, changed url check method to use startswith. * Removed argument from logging statement. * Changed IOError to OSError, fixed logging, added logging statement.
This commit is contained in:
parent
8dca73d08e
commit
61c88db8a1
3 changed files with 45 additions and 6 deletions
|
@ -3,7 +3,7 @@
|
|||
"name": "Pushover",
|
||||
"documentation": "https://www.home-assistant.io/components/pushover",
|
||||
"requirements": [
|
||||
"python-pushover==0.3"
|
||||
"python-pushover==0.4"
|
||||
],
|
||||
"dependencies": [],
|
||||
"codeowners": []
|
||||
|
|
|
@ -12,6 +12,7 @@ from homeassistant.components.notify import (
|
|||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
ATTR_ATTACHMENT = 'attachment'
|
||||
|
||||
CONF_USER_KEY = 'user_key'
|
||||
|
||||
|
@ -24,10 +25,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|||
def get_service(hass, config, discovery_info=None):
|
||||
"""Get the Pushover notification service."""
|
||||
from pushover import InitError
|
||||
|
||||
try:
|
||||
return PushoverNotificationService(
|
||||
config[CONF_USER_KEY], config[CONF_API_KEY])
|
||||
hass, config[CONF_USER_KEY], config[CONF_API_KEY])
|
||||
except InitError:
|
||||
_LOGGER.error("Wrong API key supplied")
|
||||
return None
|
||||
|
@ -36,9 +36,10 @@ def get_service(hass, config, discovery_info=None):
|
|||
class PushoverNotificationService(BaseNotificationService):
|
||||
"""Implement the notification service for Pushover."""
|
||||
|
||||
def __init__(self, user_key, api_token):
|
||||
def __init__(self, hass, user_key, api_token):
|
||||
"""Initialize the service."""
|
||||
from pushover import Client
|
||||
self._hass = hass
|
||||
self._user_key = user_key
|
||||
self._api_token = api_token
|
||||
self.pushover = Client(
|
||||
|
@ -53,6 +54,44 @@ class PushoverNotificationService(BaseNotificationService):
|
|||
|
||||
data['title'] = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT)
|
||||
|
||||
# Check for attachment.
|
||||
if ATTR_ATTACHMENT in data:
|
||||
# If attachment is a URL, use requests to open it as a stream.
|
||||
if data[ATTR_ATTACHMENT].startswith('http'):
|
||||
try:
|
||||
import requests
|
||||
response = requests.get(
|
||||
data[ATTR_ATTACHMENT],
|
||||
stream=True,
|
||||
timeout=5)
|
||||
if response.status_code == 200:
|
||||
# Replace the attachment identifier with file object.
|
||||
data[ATTR_ATTACHMENT] = response.content
|
||||
else:
|
||||
_LOGGER.error('Image not found')
|
||||
# Remove attachment key to send without attachment.
|
||||
del data[ATTR_ATTACHMENT]
|
||||
except requests.exceptions.RequestException as ex_val:
|
||||
_LOGGER.error(ex_val)
|
||||
# Remove attachment key to try sending without attachment
|
||||
del data[ATTR_ATTACHMENT]
|
||||
else:
|
||||
# Not a URL, check valid path first
|
||||
if self._hass.config.is_allowed_path(data[ATTR_ATTACHMENT]):
|
||||
# try to open it as a normal file.
|
||||
try:
|
||||
file_handle = open(data[ATTR_ATTACHMENT], 'rb')
|
||||
# Replace the attachment identifier with file object.
|
||||
data[ATTR_ATTACHMENT] = file_handle
|
||||
except OSError as ex_val:
|
||||
_LOGGER.error(ex_val)
|
||||
# Remove attachment key to send without attachment.
|
||||
del data[ATTR_ATTACHMENT]
|
||||
else:
|
||||
_LOGGER.error('Path is not whitelisted')
|
||||
# Remove attachment key to send without attachment.
|
||||
del data[ATTR_ATTACHMENT]
|
||||
|
||||
targets = kwargs.get(ATTR_TARGET)
|
||||
|
||||
if not isinstance(targets, list):
|
||||
|
@ -65,6 +104,6 @@ class PushoverNotificationService(BaseNotificationService):
|
|||
try:
|
||||
self.pushover.send_message(message, **data)
|
||||
except ValueError as val_err:
|
||||
_LOGGER.error(str(val_err))
|
||||
_LOGGER.error(val_err)
|
||||
except RequestError:
|
||||
_LOGGER.exception("Could not send pushover notification")
|
||||
|
|
|
@ -1454,7 +1454,7 @@ python-nest==4.1.0
|
|||
python-nmap==0.6.1
|
||||
|
||||
# homeassistant.components.pushover
|
||||
python-pushover==0.3
|
||||
python-pushover==0.4
|
||||
|
||||
# homeassistant.components.qbittorrent
|
||||
python-qbittorrent==0.3.1
|
||||
|
|
Loading…
Add table
Reference in a new issue