Example #1
0
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)
Example #2
0
def get_director_names(repo: AbstractRepository):
    directors = repo.get_director()
    director_names = [director.director_full_name for director in directors]

    return director_names