Source code for flexget.components.notify.notifiers.ifttt

from loguru import logger
from requests.exceptions import RequestException

from flexget import plugin
from flexget.config_schema import one_or_more
from flexget.event import event
from flexget.plugin import PluginWarning
from flexget.utils.requests import Session

plugin_name = 'ifttt'
logger = logger.bind(name=plugin_name)


[docs] class IFTTTNotifier: """Push the notification to an IFTTT webhook. Configuration options =============== =================================================================== Option Description =============== =================================================================== event The event endpoint to trigger (required) keys List of auth keys to send the notification to. (required) =============== =================================================================== Config basic example:: notify: task: via: - ifttt: event: download_added keys: - deadebeef123 """ def __init__(self): self.session = Session() self.url_template = 'https://maker.ifttt.com/trigger/{}/with/key/{}' schema = { 'type': 'object', 'properties': {'event': {'type': 'string'}, 'keys': one_or_more({'type': 'string'})}, 'required': ['event', 'keys'], 'additionalProperties': False, }
[docs] def notify(self, title, message, config): """Send notification to ifttt webhook. The notification will be sent to https://maker.ifttt.com/trigger/{event}/with/key/{key}' with the values for the config, with a json body setting 'value1' to the message title, and 'value2' to the message body. If multiple keys are provided the event will be triggered for all of them. :param str message: message body :param str title: message subject :param dict config: plugin config """ config = self.prepare_config(config) notification_body = {'value1': title, 'value2': message} errors = False for key in config['keys']: url = self.url_template.format(config['event'], key) try: self.session.post(url, json=notification_body) logger.info('Sent notification to key: {}', key) except RequestException as e: logger.error('Error sending notification to key {}: {}', key, e) errors = True if errors: raise PluginWarning('Failed to send notifications')
[docs] def prepare_config(self, config): if not isinstance(config['keys'], list): config['keys'] = [config['keys']] return config
[docs] @event('plugin.register') def register_plugin(): plugin.register(IFTTTNotifier, plugin_name, api_ver=2, interfaces=['notifiers'])