def _search_name(self, name: str, year: Optional[int]): year_from, year_to = year_range_parse(year) page = 1 page_max = 5 # each page yields a maximum of 20 results found = False while True: response = tmdb_search_movies(self.api_key, name, year, page=page, cache=self.cache) for entry in response["results"]: try: meta = MetadataMovie( id_tmdb=entry["id"], name=entry["title"], synopsis=entry["overview"], year=entry["release_date"], ) if year_from <= meta.year <= year_to: yield meta found = True except (AttributeError, KeyError, TypeError, ValueError): continue if page == response["total_pages"]: break elif page >= page_max: break page += 1 if not found: raise MnamerNotFoundException
def _search_id(self, id_tmdb: int) -> Generator[MetadataMovie, None, None]: response = tmdb_movies(self.api_key, id_tmdb, cache=self.cache) yield MetadataMovie( name=response["title"], year=response["release_date"], synopsis=response["overview"], id_tmdb=response["id"], id_imdb=response["imdb_id"], )
def _search_id( self, id_tmdb: int, language: Optional[Language] = None ) -> Generator[MetadataMovie, None, None]: response = tmdb_movies(self.api_key, id_tmdb, language, self.cache) yield MetadataMovie( name=response["title"], language=language, year=response["release_date"], synopsis=response["overview"], id_tmdb=response["id"], id_imdb=response["imdb_id"], )
def _lookup_movie(self, id_imdb: str) -> Iterator[MetadataMovie]: assert self.api_key response = omdb_title(self.api_key, id_imdb, cache=self.cache) try: release_date = dt.datetime.strptime( response["Released"], "%d %b %Y").strftime("%Y-%m-%d") except (KeyError, ValueError): if response.get("Year") in (None, "N/A"): release_date = None else: release_date = "{}-01-01".format(response["Year"]) meta = MetadataMovie( name=response["Title"], year=release_date, synopsis=response["Plot"], id_imdb=response["imdbID"], ) if meta.synopsis == "N/A": meta.synopsis = None yield meta
def test_search__missing(provider: Omdb): query = MetadataMovie() with pytest.raises(MnamerNotFoundException): next(provider.search(query))
def test_search__no_hits(provider: Omdb): query = MetadataMovie(name=JUNK_TEXT) with pytest.raises(MnamerNotFoundException): next(provider.search(query))
def test_search__name__year(meta, provider: Omdb): provider = Omdb() query = MetadataMovie(name=meta["name"], year=meta["year"]) for result in provider.search(query): assert (result.year - int(meta["year"])) <= 2
def test_search__name(meta, provider: Omdb): provider = Omdb() query = MetadataMovie(name=meta["name"]) assert any(result.id_imdb == meta["id_imdb"] for result in provider.search(query))
def test_search__id(meta: Dict[str, str], provider: Omdb): query = MetadataMovie(id_imdb=meta["id_imdb"]) results = list(provider.search(query)) assert len(results) == 1 result = results[0] assert result.name == meta["name"]
def test_search__name(meta: dict, provider: Tmdb): query = MetadataMovie(name=meta["name"]) assert any(result.id_tmdb == meta["id_tmdb"] for result in provider.search(query))
def test_search_id(meta: dict, provider: Tmdb): query = MetadataMovie(id_tmdb=meta["id_tmdb"]) results = list(provider.search(query)) assert len(results) == 1 result = results[0] assert result.name == meta["name"]