Source code for flexget.plugins.input.filmweb_watchlist
from loguru import logger
from flexget import plugin
from flexget.entry import Entry
from flexget.event import event
from flexget.utils.cached_input import cached
try:
from filmweb.exceptions import RequestFailed
from filmweb.filmweb import Filmweb as FilmwebAPI
from filmweb.items import LoggedUser
except ImportError:
# Errors are handled later
pass
logger = logger.bind(name='filmweb_watchlist')
[docs]
def translate_type(type):
return {'shows': 'serial', 'movies': 'film'}[type]
[docs]
class FilmwebWatchlist:
"""Create an entry for each movie in your Filmweb list."""
schema = {
'type': 'object',
'properties': {
'login': {'type': 'string', 'description': 'Can be username or email address'},
'password': {'type': 'string'},
'type': {'type': 'string', 'enum': ['shows', 'movies'], 'default': 'movies'},
'min_star': {
'type': 'integer',
'default': 0,
'description': 'Items will be processed with at least this level of "How much I want to see"',
},
},
'additionalProperties': False,
'required': ['login', 'password'],
}
[docs]
def on_task_start(self, task, config):
"""Raise a DependencyError if our dependencies aren't available."""
try:
from filmweb.filmweb import Filmweb as FilmwebAPI # noqa: F401
except ImportError as e:
logger.debug('Error importing pyfilmweb: {}', e)
raise plugin.DependencyError(
'filmweb_watchlist',
'pyfilmweb',
f'pyfilmweb==0.1.1.1 module required. ImportError: {e}',
logger,
)
@cached('filmweb_watchlist', persist='2 hours')
def on_task_input(self, task, config):
type = translate_type(config['type'])
logger.verbose('Retrieving filmweb watch list for user: {}', config['login'])
fw = FilmwebAPI()
logger.verbose('Logging as {}', config['login'])
try:
fw.login(str(config['login']), str(config['password']))
except RequestFailed as error:
raise plugin.PluginError(f'Authentication request failed, reason {error!s}')
user = LoggedUser(fw)
try:
watch_list = user.get_want_to_see()
except RequestFailed as error:
raise plugin.PluginError(f'Fetching watch list failed, reason {error!s}')
logger.verbose('Filmweb list contains {} items', len(watch_list))
entries = []
for item in watch_list:
if item['level'] < config['min_star']:
continue
if item['film'].type != type:
continue
item_info = item['film'].get_info()
entry = Entry()
entry['title'] = item_info['name_org'] or item_info['name']
entry['title'] += ' ({})'.format(item_info['year'])
entry['year'] = item_info['year']
entry['url'] = item['film'].url
entry['filmweb_type'] = item_info['type']
entry['filmweb_id'] = item['film'].uid
logger.debug('Created entry {}', entry)
entries.append(entry)
return entries
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(FilmwebWatchlist, 'filmweb_watchlist', api_ver=2)