def search_movies(repo: AbstractRepository, page_number: int, page_size: int = DEFAULT_PAGE_SIZE, query: str = '', genres: List[str] = [], directors: List[str] = [], actors: List[str] = []) -> SearchResults: """ Searches for movies using the given filtering options and returns a SearchResults NamedTuple. Check the get_movies method in AbstractRepository for info on filtering options. """ try: genres = [repo.get_genre(name) for name in genres] except ValueError: return SearchResults([], 0, page_number, 0) if directors: try: directors = [repo.get_director(name) for name in directors] except ValueError: return SearchResults([], 0, page_number, 0) try: actors = [repo.get_actor(name) for name in actors] except ValueError: return SearchResults([], 0, page_number, 0) movies = repo.get_movies(page_number, page_size, query, genres, directors, actors) hits = repo.get_number_of_movies(query, genres, directors, actors) pages = repo.get_number_of_movie_pages(page_size, query, genres, directors, actors) return SearchResults(movies, hits, page_number, pages)
def get_genre_names(repo: AbstractRepository): genres = repo.get_genre() genre_names = [genre.genre_name for genre in genres] return genre_names