tables += " " * 25 line_len = len(name) + 2 else: line_len += len(name) + 2 tables += name + ", " tables = tables.rstrip(", ") console("%-20s %s %s" % (k, v["version"], tables)) else: try: reset_schema(plugin) console("The database for `%s` has been reset." % plugin) except ValueError as e: console("Unable to reset %s: %s" % (plugin, e.message)) parser = add_subparser("database", do_cli, help="utilities to manage the FlexGet database") subparsers = parser.add_subparsers(title="Actions", metavar="<action>", dest="db_action") subparsers.add_parser("cleanup", help="make all plugins clean un-needed data from the database") subparsers.add_parser("vacuum", help="running vacuum can increase performance and decrease database size") reset_parser = subparsers.add_parser("reset", add_help=False, help="reset the entire database (DANGEROUS!)") reset_parser.add_argument( "--sure", action="store_true", required=True, help="you must use this flag to indicate you REALLY want to do this" ) reset_plugin_parser = subparsers.add_parser("reset-plugin", help="reset the database for a specific plugin") reset_plugin_parser.add_argument( "reset_plugin", metavar="<plugin>", nargs="?", help="name of plugin to reset (if omitted, known plugins will be listed)", )
indent = min(indent, len(line) - len(stripped)) # Remove indentation (first line is special): trimmed = [lines[0].strip()] if indent < sys.maxint: for line in lines[1:]: trimmed.append(line[indent:].rstrip()) # Strip off trailing and leading blank lines: while trimmed and not trimmed[-1]: trimmed.pop() while trimmed and not trimmed[0]: trimmed.pop(0) # Return a single string: return '\n'.join(trimmed) def print_doc(manager, options): plugin_name = options.doc plugin = plugins.get(plugin_name, None) if plugin: if not plugin.instance.__doc__: print 'Plugin %s does not have documentation' % plugin_name else: print '' print trim(plugin.instance.__doc__) print '' else: print 'Could not find plugin %s' % plugin_name parser = add_subparser('doc', print_doc, help='display plugin documentation') parser.add_argument('doc', metavar='<plugin name>', help='name of plugin to show docs for')
def clear(): """Deletes waiting movies from queue""" items = queue_get(downloaded=False) console('Removing the following movies from movie queue:') console('-' * 79) for item in items: console(item.title) queue_del(title=item.title) if not items: console('No results') console('-' * 79) # Common option to bu used in multiple subparsers what_parser = ArgumentParser(add_help=False) what_parser.add_argument('movie_name', metavar='<movie>', help='the movie (can be movie title, imdb id, or in the form `tmdb_id=XXXX`') # Register subcommand parser = add_subparser('movie-queue', do_cli, help='view and manage the movie queue') # Set up our subparsers subparsers = parser.add_subparsers(title='actions', metavar='<action>', dest='queue_action') list_parser = subparsers.add_parser('list', help='list movies from the queue') list_parser.add_argument('type', nargs='?', choices=['waiting', 'downloaded'], default='waiting', help='choose to show waiting or already downloaded movies') add_parser = subparsers.add_parser('add', parents=[what_parser], help='add a movie to the queue') add_parser.add_argument('quality', metavar='<quality>', default='ANY', nargs='?', help='the quality requirements for getting this movie (default: %(default)s)') del_parser = subparsers.add_parser('del', parents=[what_parser], help='remove a movie from the queue') forget_parser = subparsers.add_parser('forget', parents=[what_parser], help='remove the downloaded flag from a movie') clear_parser = subparsers.add_parser('clear', help='remove all un-downloaded movies from the queue')
entries = [] task_backlog = task.session.query(BacklogEntry).filter(BacklogEntry.task == task.name) for backlog_entry in task_backlog.all(): entry = Entry(backlog_entry.entry) # this is already in the task if task.find_entry(title=entry['title'], url=entry['url']): continue log.debug('Restoring %s' % entry['title']) entries.append(entry) if entries: log.verbose('Added %s entries from backlog' % len(entries)) # purge expired for backlog_entry in task_backlog.filter(datetime.now() > BacklogEntry.expire).all(): log.debug('Purging %s' % backlog_entry.title) task.session.delete(backlog_entry) return entries def clear_backlog(manager, options): session = Session() num = session.query(BacklogEntry).delete() session.close() console('%s entries cleared from backlog.' % num) parser = add_subparser('clear-backlog', clear_backlog, help='remove all items from the backlog') register_plugin(InputBacklog, 'backlog', builtin=True, api_ver=2)
reason = ' (reason: %s)' % entry['reason'] item.details = 'Accepted by %s%s' % (entry.get('accepted_by', '<unknown>'), reason) task.session.add(item) def do_cli(manager, options): session = Session() console('-- History: ' + '-' * 67) query = session.query(History) if options.search: search_term = options.search.replace(' ', '%').replace('.', '%') query = query.filter(History.title.like('%' + search_term + '%')) query = query.order_by(desc(History.time)).limit(options.limit) for item in reversed(query.all()): console(' Task : %s' % item.task) console(' Title : %s' % item.title) console(' Url : %s' % item.url) if item.filename: console(' Stored : %s' % item.filename) console(' Time : %s' % item.time.strftime("%c")) console(' Details : %s' % item.details) console('-' * 79) session.close() parser = add_subparser('history', do_cli, help='view the history of entries that FlexGet has accepted') parser.add_argument('--limit', action='store', type=int, metavar='NUM', default=50, help='limit to %(metavar)s results') parser.add_argument('--search', action='store', metavar='TERM', help='limit to results that contain %(metavar)s') register_plugin(PluginHistory, 'history', builtin=True, api_ver=2)
set_series_begin(series, ep_id) except ValueError as e: console(e) else: console('Episodes for `%s` will be accepted starting with `%s`' % (series.name, ep_id)) session.commit() finally: session.close() manager.config_changed() register_plugin(CLISeries, 'cli_series') # Register the subcommand instance = get_plugin_by_name('cli_series').instance parser = add_subparser('series', instance.do_cli, help='view and manipulate the series plugin database') # Parent parser for subcommands that need a series name series_parser = argparse.ArgumentParser(add_help=False) series_parser.add_argument('series_name', help='the name of the series', metavar='<series name>') # Set up our subparsers subparsers = parser.add_subparsers(title='actions', metavar='<action>', dest='series_action') list_parser = subparsers.add_parser('list', help='list a summary of the different series being tracked') list_parser.add_argument('type', nargs='?', choices=['all', 'configured', 'premieres'], default='configured', help='only list a subset of shows (default: %(default)s)') list_parser.add_argument('--within', type=int, metavar='DAYS', help='only show series seen within the last %(metavar)s days') show_parser = subparsers.add_parser('show', parents=[series_parser], help='show the releases FlexGet has seen for a given series ') begin_parser = subparsers.add_parser('begin', parents=[series_parser],
from flexget.plugin import plugins log = logging.getLogger('plugins') def plugins_summary(manager, options): print '-' * 79 print '%-20s%-30s%s' % ('Name', 'Roles (priority)', 'Info') print '-' * 79 # print the list for name in sorted(plugins): plugin = plugins[name] # do not include test classes, unless in debug mode if plugin.get('debug_plugin', False) and not options.debug: continue flags = [] if plugin.instance.__doc__: flags.append('--doc') if plugin.builtin: flags.append('builtin') if plugin.debug: flags.append('debug') handlers = plugin.phase_handlers roles = ', '.join('%s(%s)' % (phase, handlers[phase].priority) for phase in handlers) print '%-20s%-30s%s' % (name, roles, ', '.join(flags)) print '-' * 79 parser = add_subparser('plugins', plugins_summary, help='print registered plugin summaries')