def do_search(self): query = self.search_query title_filter = Q(Title__icontains=query) series_name_filter = Q(AlbumId__SeriesId__Title__icontains=query) keywords_filter = Q() for word in query.split(): keywords_filter |= Q(Keywords__icontains=lovins.remove_ending(word)) available_episodes = self.caching.get_available_episodes() episodes = available_episodes.filter(title_filter | keywords_filter | series_name_filter) episodes_by_title = episodes.filter(title_filter) episodes_by_keywords = episodes.filter(keywords_filter)\ .exclude(title_filter) episodes_by_series = episodes.filter(series_name_filter)\ .exclude(title_filter | keywords_filter)\ .order_by('AlbumId') # available_albums = AlbumUtils.get_available_albums() # albums_by_series = available_albums.filter(SeriesId__Title__icontains=query) # trailers_by_series = [album.TrailerId for album in albums_by_series] return [episode for episode in chain(episodes_by_title, episodes_by_keywords, episodes_by_series)]
def clean_query(self): query = self.params.get('query', None) if not query: raise ParameterExpected(parameter='query') self.search_query = lovins.remove_ending(query)