Add mastodon (#13441)

* Add mastodon

* Move login

* Revert "Move login"

This reverts commit 2c8446f62950f91c0ebfc0b4825e87421ac653fc.
This commit is contained in:
Fabian Affolter 2018-03-31 23:20:58 +02:00 committed by GitHub
parent 12affa1469
commit 7b3d17bae4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 75 additions and 1 deletions

View File

@ -507,6 +507,7 @@ omit =
homeassistant/components/notify/kodi.py homeassistant/components/notify/kodi.py
homeassistant/components/notify/lannouncer.py homeassistant/components/notify/lannouncer.py
homeassistant/components/notify/llamalab_automate.py homeassistant/components/notify/llamalab_automate.py
homeassistant/components/notify/mastodon.py
homeassistant/components/notify/matrix.py homeassistant/components/notify/matrix.py
homeassistant/components/notify/message_bird.py homeassistant/components/notify/message_bird.py
homeassistant/components/notify/mycroft.py homeassistant/components/notify/mycroft.py
@ -522,8 +523,8 @@ omit =
homeassistant/components/notify/sendgrid.py homeassistant/components/notify/sendgrid.py
homeassistant/components/notify/simplepush.py homeassistant/components/notify/simplepush.py
homeassistant/components/notify/slack.py homeassistant/components/notify/slack.py
homeassistant/components/notify/stride.py
homeassistant/components/notify/smtp.py homeassistant/components/notify/smtp.py
homeassistant/components/notify/stride.py
homeassistant/components/notify/synology_chat.py homeassistant/components/notify/synology_chat.py
homeassistant/components/notify/syslog.py homeassistant/components/notify/syslog.py
homeassistant/components/notify/telegram.py homeassistant/components/notify/telegram.py

View File

@ -0,0 +1,70 @@
"""
Mastodon platform for notify component.
For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/notify.mastodon/
"""
import logging
import voluptuous as vol
from homeassistant.components.notify import (
PLATFORM_SCHEMA, BaseNotificationService)
from homeassistant.const import CONF_ACCESS_TOKEN
import homeassistant.helpers.config_validation as cv
REQUIREMENTS = ['Mastodon.py==1.2.2']
_LOGGER = logging.getLogger(__name__)
CONF_BASE_URL = 'base_url'
CONF_CLIENT_ID = 'client_id'
CONF_CLIENT_SECRET = 'client_secret'
DEFAULT_URL = 'https://mastodon.social'
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_ACCESS_TOKEN): cv.string,
vol.Required(CONF_CLIENT_ID): cv.string,
vol.Required(CONF_CLIENT_SECRET): cv.string,
vol.Optional(CONF_BASE_URL, default=DEFAULT_URL): cv.string,
})
def get_service(hass, config, discovery_info=None):
"""Get the Mastodon notification service."""
from mastodon import Mastodon
from mastodon.Mastodon import MastodonUnauthorizedError
client_id = config.get(CONF_CLIENT_ID)
client_secret = config.get(CONF_CLIENT_SECRET)
access_token = config.get(CONF_ACCESS_TOKEN)
base_url = config.get(CONF_BASE_URL)
try:
mastodon = Mastodon(
client_id=client_id, client_secret=client_secret,
access_token=access_token, api_base_url=base_url)
mastodon.account_verify_credentials()
except MastodonUnauthorizedError:
_LOGGER.warning("Authentication failed")
return None
return MastodonNotificationService(mastodon)
class MastodonNotificationService(BaseNotificationService):
"""Implement the notification service for Mastodon."""
def __init__(self, api):
"""Initialize the service."""
self._api = api
def send_message(self, message="", **kwargs):
"""Send a message to a user."""
from mastodon.Mastodon import MastodonAPIError
try:
self._api.toot(message)
except MastodonAPIError:
_LOGGER.error("Unable to send message")

View File

@ -24,6 +24,9 @@ DoorBirdPy==0.1.3
# homeassistant.components.homekit # homeassistant.components.homekit
HAP-python==1.1.7 HAP-python==1.1.7
# homeassistant.components.notify.mastodon
Mastodon.py==1.2.2
# homeassistant.components.isy994 # homeassistant.components.isy994
PyISY==1.1.0 PyISY==1.1.0