From dfbef45e492adeac48741d46d783d8252a8c28fe Mon Sep 17 00:00:00 2001
From: Kevin Siml <appzer@users.noreply.github.com>
Date: Sun, 19 Feb 2017 02:36:28 +0100
Subject: [PATCH] Add pushsafer.com notification service (#6050)

* Add pushsafer.com notification service

* Add pushsafer.com notification service

* Add pushsafer.com notification service

* Add pushsafer.com notification service

* Update pushsafer.py

* Update pushsafer.py

* Update pushsafer.py

* Update README.rst
---
 .coveragerc                                  |  1 +
 README.rst                                   |  3 +-
 homeassistant/components/notify/pushsafer.py | 70 ++++++++++++++++++++
 requirements_all.txt                         |  3 +
 4 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 homeassistant/components/notify/pushsafer.py

diff --git a/.coveragerc b/.coveragerc
index 0dcf1ffa439..72d6460d858 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -274,6 +274,7 @@ omit =
     homeassistant/components/notify/pushbullet.py
     homeassistant/components/notify/pushetta.py
     homeassistant/components/notify/pushover.py
+    homeassistant/components/notify/pushsafer.py
     homeassistant/components/notify/rest.py
     homeassistant/components/notify/sendgrid.py
     homeassistant/components/notify/simplepush.py
diff --git a/README.rst b/README.rst
index bddbb9fd611..2b166cd9a13 100644
--- a/README.rst
+++ b/README.rst
@@ -75,7 +75,8 @@ Build home automation on top of your devices:
    `Instapush <https://instapush.im>`__, `Notify My Android
    (NMA) <http://www.notifymyandroid.com/>`__,
    `PushBullet <https://www.pushbullet.com/>`__,
-   `PushOver <https://pushover.net/>`__, `Slack <https://slack.com/>`__,
+   `PushOver <https://pushover.net/>`__,
+   `Slack <https://slack.com/>`__,
    `Telegram <https://telegram.org/>`__, `Join <http://joaoapps.com/join/>`__, and `Jabber
    (XMPP) <http://xmpp.org>`__
 
diff --git a/homeassistant/components/notify/pushsafer.py b/homeassistant/components/notify/pushsafer.py
new file mode 100644
index 00000000000..e39b94a18d6
--- /dev/null
+++ b/homeassistant/components/notify/pushsafer.py
@@ -0,0 +1,70 @@
+"""
+Pushsafer platform for notify component.
+
+For more details about this platform, please refer to the documentation at
+https://home-assistant.io/components/notify.pushsafer/
+"""
+import logging
+
+import voluptuous as vol
+
+from homeassistant.components.notify import (
+    ATTR_TITLE, ATTR_TITLE_DEFAULT, ATTR_TARGET, ATTR_DATA,
+    BaseNotificationService)
+from homeassistant.const import CONF_API_KEY
+import homeassistant.helpers.config_validation as cv
+
+REQUIREMENTS = ['python-pushsafer==0.2']
+_LOGGER = logging.getLogger(__name__)
+
+
+PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({
+    vol.Required(CONF_API_KEY): cv.string,
+})
+
+
+# pylint: disable=unused-variable
+def get_service(hass, config, discovery_info=None):
+    """Get the Pushsafer notification service."""
+    from pushsafer import InitError
+
+    try:
+        return PushsaferNotificationService(config[CONF_API_KEY])
+    except InitError:
+        _LOGGER.error(
+            'Wrong private key supplied. Get it at https://www.pushsafer.com')
+        return None
+
+
+class PushsaferNotificationService(BaseNotificationService):
+    """Implement the notification service for Pushsafer."""
+
+    def __init__(self, privatekey):
+        """Initialize the service."""
+        from pushsafer import Client
+        self._privatekey = privatekey
+        self.pushsafer = Client(
+            "", privatekey=self._privatekey)
+
+    def send_message(self, message='', **kwargs):
+        """Send a message to a user."""
+        # Make a copy and use empty dict if necessary
+        data = dict(kwargs.get(ATTR_DATA) or {})
+
+        data['title'] = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT)
+
+        targets = kwargs.get(ATTR_TARGET)
+
+        if not isinstance(targets, list):
+            targets = [targets]
+
+        for target in targets:
+            if target is not None:
+                data['device'] = target
+
+            try:
+                self.pushsafer.send_message(message, data['title'], "", "",
+                                            "", "", "", "",
+                                            "0", "", "", "")
+            except ValueError as val_err:
+                _LOGGER.error(str(val_err))
diff --git a/requirements_all.txt b/requirements_all.txt
index 77ab63d5010..dba4baf8de2 100755
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -576,6 +576,9 @@ python-nmap==0.6.1
 # homeassistant.components.notify.pushover
 python-pushover==0.2
 
+# homeassistant.components.notify.pushsafer
+python-pushsafer==0.2
+
 # homeassistant.components.sensor.synologydsm
 python-synology==0.1.0
 
-- 
GitLab