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

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 = 'join'
logger = logger.bind(name=plugin_name)

requests = RequestSession(max_retries=3)
requests.add_domain_limiter(TimedLimiter('appspot.com', '5 seconds'))

JOIN_URL = 'https://joinjoaomgcd.appspot.com/_ah/api/messaging/v1/sendPush'


[docs] class JoinNotifier: """Send Join notifications. Example:: notify: entries: via: - join: [api_key: <API_KEY> (your join api key. Only required for 'group' notifications)] [group: <GROUP_NAME> (name of group of join devices to notify. 'all', 'android', etc.) [device: <DEVICE_ID> (can also be a list of device ids)] [url: <NOTIFICATION_URL>] [sms_number: <NOTIFICATION_SMS_NUMBER>] [icon: <NOTIFICATION_ICON>] """ schema = { 'type': 'object', 'properties': { 'api_key': {'type': 'string'}, 'group': { 'type': 'string', 'enum': ['all', 'android', 'chrome', 'windows10', 'phone', 'tablet', 'pc'], }, 'device': one_or_more({'type': 'string'}), 'device_name': one_or_more({'type': 'string'}), 'url': {'type': 'string'}, 'icon': {'type': 'string'}, 'sms_number': {'type': 'string'}, 'priority': {'type': 'integer', 'minimum': -2, 'maximum': 2}, }, 'required': ['api_key'], 'not': {'required': ['device', 'group']}, 'error_not': "Cannot select both 'device' and 'group'", 'additionalProperties': False, }
[docs] def notify(self, title, message, config): """Send Join notifications.""" notification = { 'title': title, 'text': message, 'url': config.get('url'), 'icon': config.get('icon'), 'priority': config.get('priority'), 'apikey': config['api_key'], } if config.get('device'): if isinstance(config['device'], list): notification['deviceIds'] = ','.join(config['device']) else: notification['deviceId'] = config['device'] elif config.get('group'): notification['deviceId'] = 'group.' + config['group'] else: notification['deviceId'] = 'group.all' if config.get('device_name'): if isinstance(config['device_name'], list): notification['deviceNames'] = ','.join(config['device_name']) else: notification['deviceNames'] = config['device_name'] if config.get('sms_number'): notification['smsnumber'] = config['sms_number'] notification['smstext'] = message try: response = requests.get(JOIN_URL, params=notification) except RequestException as e: raise PluginWarning(e.args[0]) else: error = response.json().get('errorMessage') if error: raise PluginWarning(error)
[docs] @event('plugin.register') def register_plugin(): plugin.register(JoinNotifier, plugin_name, api_ver=2, interfaces=['notifiers'])