def tags(path): """ Convert lists of TAGS values into regex expressions. :param str: dictionry path of lists to fetch from TAGS variable :rtype: str """ return '|'.join(map(re.escape, sorted(constants.get(path), key=len, reverse=True)))
def search_web(self): # Search an exact title: results = self.provider.search(self['type'], self['title'], self.get('year'), self.get('country'), limit=20, strict_search=True) #results = self.match_title(self['title'], results, exclude_beginning_match=True, exclude_ending_match=True) # If no results, explore exceptions: if not results or (self.get('year') is not None and not list(filter(lambda x: x['year'] == self.get('year'), results))): ## EXCEPTION 1: Movie may have been identified as a show because it contains "Episode" or "Part": if self['type'] == 'shows': # Form an aggregated title composed of "title", "episode" and "episode_title" matches results: title_agr = '%s %s %s' % (self['title'], self._matches['episodes'][0].group(), self.get('episode_title', '')) # Search new title (no exact match is required as concatenated attributes will already narrow results): results = self.provider.search('movies', title_agr, self.get('year'), limit=20, strict_search=True, strict_search_options=) # results = self.match_title(title_agr, results, strict_search=True, struexclude_ending_match=True) # Clean-up: if results: self['type'] == 'movies' self.remove_matches(['season', 'episodes', 'episode_title', 'air_date']) ## EXCEPTION 2: Movie may have a roman number (e.g. II, III, IV...), convert it to a regular number: if self['type'] == 'movies' and re.search(r'[\s](?P<number>%s)(?:[\s]|$)' % '|'.join(reversed(constants.get('video.numerals.roman')[2:])), self['title'], flags=re.I): title = utils.normalize(re.sub(r'[\s](?P<number>%s)(?:[\s]|$)' % '|'.join(reversed(constants.get('video.numerals.roman')[2:])), lambda m: ' %s ' % utils.to_int(m.group('number')), self['title'], flags=re.I)) # Search newly formatted title (no exact match is required as concatenated attributes will narrow results): results = self.provider.search(self['type'], title, self.get('year'), self.get('country'), limit=20) # If still no results, refine search: if not results: # Search results: results = self.provider.search(self['type'], self['title'], self.get('year'), self.get('country'), limit=20) # results = self.match_title(self['title'], results, include_alternative_titles=True) return results