From 73cc8a4034e89dd70771ddb839cc3dc1e54b9950 Mon Sep 17 00:00:00 2001 From: Samir Benmendil Date: Fri, 6 Feb 2015 19:10:06 +0000 Subject: [PATCH] flexget: update flexget config --- flexget/config.yml | 9 +- flexget/plugins/my_exists_movie.py | 156 ----------------------------- 2 files changed, 6 insertions(+), 159 deletions(-) delete mode 100644 flexget/plugins/my_exists_movie.py diff --git a/flexget/config.yml b/flexget/config.yml index 6874e65..ecde190 100644 --- a/flexget/config.yml +++ b/flexget/config.yml @@ -117,11 +117,12 @@ templates: # {{{1 min_score: 7.5 min_votes: 30000 imdb_required: on - my_exists_movie: + exists_movie: path: - '/mnt/Skaro/Movies' allow_different_qualities: better type: files + lookup: imdb tasks: # {{{1 @@ -181,7 +182,8 @@ tasks: # {{{1 priority: 2 seen: local - disable_builtins: [retry_failed] + disable: + - retry_failed no_entries_ok: yes find: @@ -220,7 +222,8 @@ tasks: # {{{1 priority: 3 seen: local - disable_builtins: [retry_failed] + disable: + - retry_failed no_entries_ok: yes find: diff --git a/flexget/plugins/my_exists_movie.py b/flexget/plugins/my_exists_movie.py deleted file mode 100644 index 92d6e12..0000000 --- a/flexget/plugins/my_exists_movie.py +++ /dev/null @@ -1,156 +0,0 @@ -from __future__ import unicode_literals, division, absolute_import -import os -import re -import logging - -from flexget import plugin -from flexget.event import event -from flexget.config_schema import one_or_more -from flexget.plugin import get_plugin_by_name -from flexget.utils.tools import TimedDict - -log = logging.getLogger('my_exists_movie') - - -class FilterExistsMovie(object): - """ - Reject existing movies. - - Example:: - - exists_movie: /storage/movies/ - """ - - schema = { - 'anyOf': [ - one_or_more({'type': 'string', 'format': 'path'}), - { - 'type': 'object', - 'properties': { - 'path': one_or_more({'type': 'string', 'format': 'path'}), - 'allow_different_qualities': {'enum': ['better', True, False], 'default': False}, - 'type': {'enum': ['files', 'dirs'], 'default': 'files'} - }, - 'required': ['path'], - 'additionalProperties': False - } - ] - } - - def __init__(self): - self.cache = TimedDict(cache_time='1 hour') - - def prepare_config(self, config): - # if config is not a dict, assign value to 'path' key - if not isinstance(config, dict): - config = {'path': config} - # if only a single path is passed turn it into a 1 element list - if isinstance(config['path'], basestring): - config['path'] = [config['path']] - return config - - @plugin.priority(-1) - def on_task_filter(self, task, config): - # if not task.accepted: - # log.debug('nothing accepted, aborting') - # return - - config = self.prepare_config(config) - imdb_lookup = plugin.get_plugin_by_name('imdb_lookup').instance - - incompatible_files = 0 - incompatible_entries = 0 - count_entries = 0 - count_files = 0 - - # list of imdb ids gathered from paths / cache - qualities = {} - - for folder in config['path']: - folder = os.path.expanduser(folder) - # see if this path has already been scanned - if folder in self.cache: - log.verbose('Using cached scan for %s ...' % folder) - qualities.update(self.cache[folder]) - continue - - path_ids = {} - - if not os.path.isdir(folder): - log.critical('Path %s does not exist' % folder) - continue - - log.verbose('Scanning path %s ...' % folder) - - # Help debugging by removing a lot of noise - #logging.getLogger('movieparser').setLevel(logging.WARNING) - #logging.getLogger('imdb_lookup').setLevel(logging.WARNING) - - # scan through - for root, dirs, files in os.walk(folder): - for item in eval(config['type']): - log.debug("item: %s" % item) - pattern = re.compile(".*\.(avi|mkv|mp4|mpg|webm)") - if not re.search(pattern, item): - continue - count_files += 1 - - movie = get_plugin_by_name('parsing').instance.parse_movie(item) - - try: - imdb_id = imdb_lookup.imdb_id_lookup(movie_title=movie.name, - raw_title=item, - session=task.session) - if imdb_id in path_ids: - log.trace('duplicate %s' % item) - continue - if imdb_id is not None: - log.trace('adding: %s' % imdb_id) - path_ids[imdb_id] = movie.quality - except plugin.PluginError as e: - log.trace('%s lookup failed (%s)' % (item, e.value)) - incompatible_files += 1 - - # store to cache and extend to found list - self.cache[folder] = path_ids - qualities.update(path_ids) - - log.debug('qualities: %s' % qualities) - - log.debug('-- Start filtering entries ----------------------------------') - - # do actual filtering - for entry in task.accepted: - count_entries += 1 - if not entry.get('imdb_id', eval_lazy=False): - try: - imdb_lookup.lookup(entry) - except plugin.PluginError as e: - log.trace('entry %s imdb failed (%s)' % (entry['title'], e.value)) - incompatible_entries += 1 - continue - - entry.trace("msg") - # actual filtering - if entry['imdb_id'] in qualities: - if config.get('allow_different_qualities') == 'better': - if entry['quality'] > qualities[entry['imdb_id']]: - log.trace('better quality') - continue - elif config.get('allow_different_qualities'): - if entry['quality'] != qualities[entry['imdb_id']]: - log.trace('wrong quality') - continue - - entry.reject('movie exists') - - if incompatible_files or incompatible_entries: - log.verbose('There were some incompatible items. %s of %s entries ' - 'and %s of %s directories could not be verified.' % - (incompatible_entries, count_entries, incompatible_files, count_dirs)) - - log.debug('-- Finished filtering entries -------------------------------') - -@event('plugin.register') -def register_plugin(): - plugin.register(FilterExistsMovie, 'my_exists_movie', groups=['exists'], api_ver=2) -- 2.48.1