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

import json

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 as RequestSession
from flexget.utils.requests import TimedLimiter

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

RAPIDPUSH_URL = 'https://rapidpush.net/api'

requests = RequestSession(max_retries=3)
requests.add_domain_limiter(TimedLimiter('rapidpush.net', '5 seconds'))


[docs] class RapidpushNotifier: """Send a Rapidpush notification. Example:: notify: entries: via: - rapidpush: apikey: xxxxxxx (can also be a list of api keys) [category: category, default FlexGet] [group: device group, default no group] [channel: the broadcast notif. channel; if provided it will be send to the channel subscribers instead of your devices, default no channel] [priority: 0 - 6 (6 = highest), default 2 (normal)] """ schema = { 'type': 'object', 'properties': { 'api_key': one_or_more({'type': 'string'}), 'category': {'type': 'string', 'default': 'Flexget'}, 'group': {'type': 'string'}, 'channel': {'type': 'string'}, 'priority': {'type': 'integer', 'minimum': 0, 'maximum': 6}, }, 'additionalProperties': False, 'required': ['api_key'], 'not': { 'anyOf': [ {'required': ['channel', 'group']}, {'required': ['channel', 'category']}, {'required': ['channel', 'priority']}, ] }, 'error_not': "Cannot use 'channel' with 'group', 'category' or 'priority'", }
[docs] def notify(self, title, message, config): """Send a Rapidpush notification.""" notification = {'title': title, 'message': message} if not isinstance(config['api_key'], list): config['api_key'] = [config['api_key']] if config.get('channel'): params = {'command': 'broadcast'} notification['channel'] = config['channel'] else: params = {'command': 'notify'} notification['category'] = config['category'] if config.get('group'): notification['group'] = config['group'] if config.get('priority') is not None: notification['priority'] = config['priority'] params['data'] = json.dumps(notification) for key in config['api_key']: params['apikey'] = key try: response = requests.post(RAPIDPUSH_URL, params=params) except RequestException as e: raise PluginWarning(e.args[0]) else: if response.json()['code'] > 400: raise PluginWarning(response.json()['desc'])
[docs] @event('plugin.register') def register_plugin(): plugin.register(RapidpushNotifier, plugin_name, api_ver=2, interfaces=['notifiers'])