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