Source code for flexget.components.managed_lists.lists.regexp_list.cli

import re
from argparse import ArgumentParser, ArgumentTypeError

from flexget import options
from flexget.event import event
from flexget.terminal import TerminalTable, console, table_parser
from flexget.utils.database import Session

from . import db


[docs] def do_cli(manager, options): """Handle regexp-list cli.""" action_map = { 'all': action_all, 'list': action_list, 'add': action_add, 'del': action_del, 'purge': action_purge, } action_map[options.regexp_action](options)
[docs] def action_all(options): """Show all regexp lists.""" lists = db.get_regexp_lists() header = ['#', 'List Name'] table = TerminalTable(*header, table_type=options.table_type) for regexp_list in lists: table.add_row(str(regexp_list.id), regexp_list.name) console(table)
[docs] def action_list(options): """List regexp list.""" with Session() as session: regexp_list = db.get_list_by_exact_name(options.list_name) if not regexp_list: console(f'Could not find regexp list with name {options.list_name}') return table = TerminalTable('Regexp', table_type=options.table_type) regexps = db.get_regexps_by_list_id( regexp_list.id, order_by='added', descending=True, session=session ) for regexp in regexps: table.add_row(regexp.regexp or '') console(table)
[docs] def action_add(options): with Session() as session: regexp_list = db.get_list_by_exact_name(options.list_name) if not regexp_list: console(f'Could not find regexp list with name {options.list_name}, creating') regexp_list = db.create_list(options.list_name, session=session) regexp = db.get_regexp(list_id=regexp_list.id, regexp=options.regexp, session=session) if not regexp: console(f'Adding regexp {options.regexp} to list {regexp_list.name}') db.add_to_list_by_name(regexp_list.name, options.regexp, session=session) console( f'Successfully added regexp {options.regexp} to regexp list {regexp_list.name} ' ) else: console(f'Regexp {options.regexp} already exists in list {regexp_list.name}')
[docs] def action_del(options): with Session() as session: regexp_list = db.get_list_by_exact_name(options.list_name) if not regexp_list: console(f'Could not find regexp list with name {options.list_name}') return regexp = db.get_regexp(list_id=regexp_list.id, regexp=options.regexp, session=session) if regexp: console(f'Removing regexp {options.regexp} from list {options.list_name}') session.delete(regexp) else: console(f'Could not find regexp {options.movie_title} in list {options.list_name}') return
[docs] def action_purge(options): with Session() as session: regexp_list = db.get_list_by_exact_name(options.list_name) if not regexp_list: console(f'Could not find regexp list with name {options.list_name}') return console(f'Deleting list {options.list_name}') session.delete(regexp_list)
[docs] def regexp_type(regexp): try: re.compile(regexp) except re.error as e: raise ArgumentTypeError(e) return regexp
[docs] @event('options.register') def register_parser_arguments(): # Common option to be used in multiple subparsers regexp_parser = ArgumentParser(add_help=False) regexp_parser.add_argument('regexp', type=regexp_type, help='The regexp') list_name_parser = ArgumentParser(add_help=False) list_name_parser.add_argument( 'list_name', nargs='?', help='Name of regexp list to operate on', default='regexps' ) # Register subcommand parser = options.register_command('regexp-list', do_cli, help='View and manage regexp lists') # Set up our subparsers subparsers = parser.add_subparsers(title='actions', metavar='<action>', dest='regexp_action') subparsers.add_parser('all', parents=[table_parser], help='Shows all existing regexp lists') subparsers.add_parser( 'list', parents=[list_name_parser, table_parser], help='List regexp from a list' ) subparsers.add_parser( 'add', parents=[list_name_parser, regexp_parser], help='Add a regexp to a list' ) subparsers.add_parser( 'del', parents=[list_name_parser, regexp_parser], help='Remove a regexp from a list' ) subparsers.add_parser( 'purge', parents=[list_name_parser], help='Removes an entire list. Use with caution!' )