1from loguru import logger 2from sqlalchemy.orm.exc import NoResultFound 3 4from flexget import plugin 5from flexget.event import event 6from flexget.manager import Session 7 8from . import db 9 10logger = logger.bind(name=__name__) 11 12 13class EntryList: 14 schema = {'type': 'string'} 15 16 @staticmethod 17 def get_list(config): 18 return db.DBEntrySet(config) 19 20 def on_task_input(self, task, config): 21 return list(db.DBEntrySet(config)) 22 23 def search(self, task, entry, config=None): 24 entries = [] 25 with Session() as session: 26 try: 27 entry_list = db.get_list_by_exact_name(config, session=session) 28 except NoResultFound: 29 logger.warning("Entry list with name '{}' does not exist", config) 30 else: 31 for search_string in entry.get('search_strings', [entry['title']]): 32 logger.debug( 33 'searching for entry that matches {} in entry_list {}', 34 search_string, 35 config, 36 ) 37 search_string = search_string.replace(' ', '%').replace('.', '%') 38 query = entry_list.entries.filter( 39 db.EntryListEntry.title.like('%' + search_string + '%') 40 ) 41 entries += [e.entry for e in query.all()] 42 finally: 43 return entries 44 45 46@event('plugin.register') 47def register_plugin(): 48 plugin.register(EntryList, 'entry_list', api_ver=2, interfaces=['task', 'list', 'search']) 49