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

import xml.etree.ElementTree as ET

import requests
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

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

NOTIFYMYANDROID_URL = 'https://www.notifymyandroid.com/publicapi/notify'


[docs] class NotifyMyAndroidNotifier: """Send a Notifymyandroid notification. Example:: notify: entries: via: - notifymyandroid: apikey: xxxxxxx [application: application name, default FlexGet] [event: event title, default New Release] [priority: -2 - 2 (2 = highest), default 0] Configuration parameters are also supported from entries (eg. through set). """ schema = { 'type': 'object', 'properties': { 'api_key': one_or_more({'type': 'string'}), 'application': {'type': 'string', 'default': 'FlexGet'}, 'priority': {'type': 'integer', 'minimum': -2, 'maximum': 2}, 'developer_key': {'type': 'string'}, 'url': {'type': 'string'}, 'html': {'type': 'boolean'}, }, 'required': ['api_key'], 'additionalProperties': False, }
[docs] def notify(self, title, message, config): """Send a Notifymyandroid notification.""" notification = { 'event': title, 'description': message, 'application': config.get('application'), 'priority': config.get('priority'), 'developerkey': config.get('developer_key'), 'url': config.get('url'), } # Handle multiple API keys if isinstance(config['api_key'], list): config['api_key'] = ','.join(config['api_key']) notification['apikey'] = config['api_key'] # Special case for html handling if config.get('html'): notification['content-type'] = 'text/html' try: response = requests.post(NOTIFYMYANDROID_URL, data=notification) except RequestException as e: raise PluginWarning(e.args[0]) request_status = ET.fromstring(response.content) error = request_status.find('error') if error is not None: raise PluginWarning(error.text) success = request_status.find('success').attrib logger.debug( 'notifymyandroid notification sent. Notifications remaining until next reset: {}. ' 'Next reset will occur in {} minutes', success['remaining'], success['resettimer'], )
[docs] @event('plugin.register') def register_plugin(): plugin.register(NotifyMyAndroidNotifier, plugin_name, api_ver=2, interfaces=['notifiers'])