Source code for flexget.plugins.input.medusa
from urllib.parse import urlparse
from loguru import logger
from flexget import plugin
from flexget.entry import Entry
from flexget.event import event
logger = logger.bind(name='medusa')
[docs]
class Medusa:
schema = {
'type': 'object',
'properties': {
'base_url': {'type': 'string', 'format': 'uri'},
'port': {'type': 'number', 'default': 8081},
'username': {'type': 'string'},
'password': {'type': 'string'},
'only_monitored': {'type': 'boolean', 'default': False},
'include_ended': {'type': 'boolean', 'default': False},
},
'required': ['username', 'password', 'base_url'],
'additionalProperties': False,
}
[docs]
def on_task_input(self, task, config):
"""Return ALL of the shows monitored by Medusa.
This includes both ongoing and ended.
Syntax::
medusa:
base_url=<value>
port=<value>
username=<value>
password=<value>
Options base_url, username and password are required.
Use with input plugin like discover and/or configure_series.
Example::
download-tv-task:
configure_series:
from:
medusa:
base_url: http://localhost
port: 8531
username: USERNAME
password: PASSWORD
discover:
what:
- next_series_episodes: yes
from:
torrentz: any
download:
/download/tv
Note that when using the configure_series plugin with Medusa
you are basically synced to it, so removing a show in Medusa will
remove it in flexget as well, which could be positive or negative,
depending on your usage.
"""
parsed_url = urlparse(config.get('base_url'))
base_url = '{scheme}://{url}:{port}/api/v2'.format(
scheme=parsed_url.scheme, url=parsed_url.netloc, port=config.get('port')
)
body_auth = {'username': config.get('username'), 'password': config.get('password')}
api_key = task.requests.post(f'{base_url}/authenticate', json=body_auth).json()['token']
headers = {'x-auth': 'Bearer ' + api_key}
params = {'limit': 1000}
series = task.requests.get(f'{base_url}/series', params=params, headers=headers).json()
entries = []
for show in series:
logger.debug('processing show: {}', show)
if (show['config']['paused'] and config.get('only_monitored')) or (
show['status'] == 'Ended' and not config.get('include_ended')
):
logger.debug('discarted show: {}', show)
entry = Entry(title=show['title'], url='', series_name=show['title'])
if entry.isvalid():
entries.append(entry)
else:
logger.error('Invalid entry created? {}', entry)
return entries
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(Medusa, 'medusa', api_ver=2)