Source code for flexget.plugins.cli.try_regexp

import re

from loguru import logger

from flexget import options, plugin
from flexget.event import event
from flexget.terminal import console

logger = logger.bind(name='try_regexp')


[docs] class PluginTryRegexp: """Allows user to test regexps for a task.""" def __init__(self): self.abort = False
[docs] def matches(self, entry, regexp): """Return True if any of the entry string fields match given regexp.""" for field, value in entry.items(): if not isinstance(value, str): continue if re.search(regexp, value, re.IGNORECASE): return (True, field) return (False, None)
[docs] def on_task_filter(self, task, config): if not task.options.try_regexp: return if self.abort: return console('-' * 79) console('Hi there, welcome to try regexps in realtime!') console( "Press ^D or type 'exit' to continue. Type 'continue' to continue non-interactive execution." ) console( f"Task '{task.name}' has {len(task.entries)} entries, enter regexp to see what matches it." ) while True: try: s = input('--> ') if s == 'exit': break if s in ('abort', 'continue'): self.abort = True break except EOFError: break count = 0 for entry in task.entries: try: match, field = self.matches(entry, s) if match: console( 'Title: {:40s} URL: {:30s} From: {}'.format( entry['title'], entry['url'], field ) ) count += 1 except re.error: console('Invalid regular expression') break console(f'{count} of {len(task.entries)} entries matched') console('Bye!')
[docs] @event('plugin.register') def register_plugin(): # This plugin runs on task phases, but should not be allowed in the config, so we do not declare the 'task' # interface. This may break if we start checking for the task interface for more than just config schemas. plugin.register(PluginTryRegexp, '--try-regexp', builtin=True, interfaces=[], api_ver=2)
[docs] @event('options.register') def register_parser_arguments(): options.get_parser('execute').add_argument( '--try-regexp', action='store_true', dest='try_regexp', default=False, help='try regular expressions interactively', )