2
from flexget.plugin import *
4
log = logging.getLogger('search')
7
class SearchPlugins(object):
10
Implements --search-plugins
13
def on_process_start(self, feed):
14
if feed.manager.options.search_plugins:
15
feed.manager.disable_feeds()
16
header = '-- Supported search plugins: '
17
header = header + '-' * (79 - len(header))
19
for plugin in get_plugins_by_group('search'):
20
print ' %s' % plugin.name
24
class PluginSearch(object):
26
Search entry from sites. Accepts list of known search plugins, list is in priority order.
27
Once hit has been found no more searches are performed. Should be used only when
28
there is no other way to get working download url, ie. when input plugin does not provide
29
any downloadable urls.
38
- Some url rewriters will use search plugins automaticly if enry url points into a search page.
42
# TODO: should only accept registered search plugins
43
from flexget import validator
44
search = validator.factory('list')
48
def on_feed_urlrewrite(self, feed):
49
# no searches in unit test mode
50
if feed.manager.unit_test:
54
for plugin in get_plugins_by_group('search'):
55
plugins[plugin.name] = plugin.instance
57
for entry in feed.accepted:
59
# loop trough configured searches
60
for name in feed.config.get('search', []):
61
if not name in plugins:
62
log.error('Search plugins %s not found' % name)
63
log.debug('Registered: %s' % ', '.join(plugins.keys()))
65
log.debug('Issuing search from %s' % name)
67
url = plugins[name].search(feed, entry)
68
except PluginWarning, pw:
69
log.debug('Search failed: %s' % pw.value)
72
log.debug('Found url: %s' % url)
79
feed.reject(entry, 'search failed')
81
register_plugin(PluginSearch, 'search')
82
register_plugin(SearchPlugins, '--search-plugins', builtin=True)
83
register_parser_option('--search-plugins', action='store_true', dest='search_plugins', default=False,
84
help='List supported search plugins.')