Coverage report: 100%

Files Functions Classes

coverage.py v7.10.1, created at 2025-10-19 21:13 +0800

File function statements missing excluded coverage
src\__init__.py (no function) 0 0 0 100%
src\app.py init_api 8 0 0 100%
src\app.py (no function) 9 0 0 100%
src\routers\anime.py search_animes 1 0 0 100%
src\routers\anime.py info_animes 1 0 0 100%
src\routers\anime.py review_animes 1 0 0 100%
src\routers\anime.py review_specific_animes 1 0 0 100%
src\routers\anime.py list_animes_trending 1 0 0 100%
src\routers\anime.py list_animes_vod 1 0 0 100%
src\routers\anime.py list_animes_year_series 1 0 0 100%
src\routers\anime.py list_animes_year_specific 2 0 0 100%
src\routers\anime.py list_animes_year_season 1 0 0 100%
src\routers\anime.py list_animes_company 1 0 0 100%
src\routers\anime.py list_animes_tag 1 0 0 100%
src\routers\anime.py list_animes_person 1 0 0 100%
src\routers\anime.py (no function) 45 0 0 100%
src\routers\drama.py search_dramas 1 0 0 100%
src\routers\drama.py info_dramas 1 0 0 100%
src\routers\drama.py review_dramas 1 0 0 100%
src\routers\drama.py review_specific_dramas 1 0 0 100%
src\routers\drama.py list_dramas_trending 1 0 0 100%
src\routers\drama.py list_dramas_vod 1 0 0 100%
src\routers\drama.py list_dramas_year_series 1 0 0 100%
src\routers\drama.py list_dramas_year_specific 2 0 0 100%
src\routers\drama.py list_dramas_country 1 0 0 100%
src\routers\drama.py list_dramas_genre 1 0 0 100%
src\routers\drama.py list_dramas_tag 1 0 0 100%
src\routers\drama.py list_dramas_person 1 0 0 100%
src\routers\drama.py (no function) 45 0 0 100%
src\routers\index.py index 1 0 0 100%
src\routers\index.py (no function) 5 0 0 100%
src\routers\movie.py search_movies 1 0 0 100%
src\routers\movie.py info_movies 1 0 0 100%
src\routers\movie.py review_movies 1 0 0 100%
src\routers\movie.py review_specific_movies 1 0 0 100%
src\routers\movie.py list_movies_currently_screening 1 0 0 100%
src\routers\movie.py list_movies_coming_soon 1 0 0 100%
src\routers\movie.py list_movies_opening_this_week 1 0 0 100%
src\routers\movie.py list_movies_trending 1 0 0 100%
src\routers\movie.py list_movies_vod 1 0 0 100%
src\routers\movie.py list_movies_award 1 0 0 100%
src\routers\movie.py list_movies_year_series 1 0 0 100%
src\routers\movie.py list_movies_year_specific 2 0 0 100%
src\routers\movie.py list_movies_country 1 0 0 100%
src\routers\movie.py list_movies_genre 1 0 0 100%
src\routers\movie.py list_movies_distributor 1 0 0 100%
src\routers\movie.py list_movies_series 1 0 0 100%
src\routers\movie.py list_movies_tag 1 0 0 100%
src\routers\movie.py list_movies_person 1 0 0 100%
src\routers\movie.py (no function) 63 0 0 100%
src\scrape\__init__.py (no function) 0 0 0 100%
src\scrape\base_scraper.py BaseScraper.__init__ 3 0 0 100%
src\scrape\base_scraper.py BaseScraper.scrape 20 0 1 100%
src\scrape\base_scraper.py BaseScraper._raise_if_page_service_unavailable 4 0 0 100%
src\scrape\base_scraper.py BaseScraper._raise_if_page_not_found 4 0 0 100%
src\scrape\base_scraper.py (no function) 18 0 0 100%
src\scrape\info\__init__.py (no function) 0 0 0 100%
src\scrape\info\info_anime_scraper.py InfoAnimeScraper.__init__ 4 0 0 100%
src\scrape\info\info_anime_scraper.py InfoAnimeScraper.set_info_data 26 0 0 100%
src\scrape\info\info_anime_scraper.py InfoAnimeScraper.set_review_data 17 0 0 100%
src\scrape\info\info_anime_scraper.py (no function) 12 0 0 100%
src\scrape\info\info_drama_scraper.py InfoDramaScraper.__init__ 4 0 0 100%
src\scrape\info\info_drama_scraper.py InfoDramaScraper.set_info_data 26 0 0 100%
src\scrape\info\info_drama_scraper.py InfoDramaScraper.set_review_data 17 0 0 100%
src\scrape\info\info_drama_scraper.py (no function) 12 0 0 100%
src\scrape\info\info_movie_scraper.py InfoMovieScraper.__init__ 3 0 0 100%
src\scrape\info\info_movie_scraper.py InfoMovieScraper.set_info_data 25 0 0 100%
src\scrape\info\info_movie_scraper.py InfoMovieScraper.set_review_data 16 0 0 100%
src\scrape\info\info_movie_scraper.py (no function) 12 0 0 100%
src\scrape\info\info_scraper.py InfoScraper.__init__ 5 0 0 100%
src\scrape\info\info_scraper.py InfoScraper.get_response 1 0 0 100%
src\scrape\info\info_scraper.py InfoScraper.get_logging 1 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_title 4 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_original_title 5 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_synopsis 2 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_rating 5 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_data_mark 4 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_data_clip 4 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_link 1 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_official_site 2 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_poster 2 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_production_year 2 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_other_info 8 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_person_info 5 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._is_reviews_empty 2 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_review 1 0 0 100%
src\scrape\info\info_scraper.py InfoScraper._get_review_info 2 0 0 100%
src\scrape\info\info_scraper.py (no function) 26 0 0 100%
src\scrape\scrape_service.py search_scrape 15 0 2 100%
src\scrape\scrape_service.py info_scrape 15 0 2 100%
src\scrape\scrape_service.py review_scrape 15 0 2 100%
src\scrape\scrape_service.py (no function) 14 0 0 100%
src\scrape\search\__init__.py (no function) 0 0 0 100%
src\scrape\search\search_anime_scraper.py SearchAnimeScraper.__init__ 1 0 0 100%
src\scrape\search\search_anime_scraper.py SearchAnimeScraper.set_search_results 26 0 0 100%
src\scrape\search\search_anime_scraper.py (no function) 11 0 0 100%
src\scrape\search\search_drama_scraper.py SearchDramaScraper.__init__ 1 0 0 100%
src\scrape\search\search_drama_scraper.py SearchDramaScraper.set_search_results 26 0 0 100%
src\scrape\search\search_drama_scraper.py (no function) 11 0 0 100%
src\scrape\search\search_movie_scraper.py SearchMovieScraper.__init__ 1 0 0 100%
src\scrape\search\search_movie_scraper.py SearchMovieScraper.set_search_results 25 0 0 100%
src\scrape\search\search_movie_scraper.py (no function) 11 0 0 100%
src\scrape\search\search_scraper.py SearchScraper.__init__ 6 0 0 100%
src\scrape\search\search_scraper.py SearchScraper.get_response 1 0 0 100%
src\scrape\search\search_scraper.py SearchScraper.get_logging 1 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_heading 5 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._is_results_empty 4 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_results_container 2 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_title 1 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_rating 2 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_data_mark 1 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_data_clip 1 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_poster 2 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_other_info 8 0 0 100%
src\scrape\search\search_scraper.py SearchScraper._get_person_info 2 0 0 100%
src\scrape\search\search_scraper.py (no function) 21 0 0 100%
src\utility\__init__.py (no function) 0 0 0 100%
src\utility\config.py (no function) 12 0 0 100%
src\utility\endpoints.py (no function) 50 0 0 100%
src\utility\lib.py CustomException.not_found 1 0 0 100%
src\utility\lib.py CustomException.server_error 1 0 0 100%
src\utility\lib.py CustomException.service_unavailable 1 0 0 100%
src\utility\lib.py Logger.info 1 0 0 100%
src\utility\lib.py Logger.warn 1 0 0 100%
src\utility\lib.py Logger.err 1 0 0 100%
src\utility\lib.py Logger.exception 1 0 0 100%
src\utility\lib.py MsgSpecJSONResponse.render 1 0 0 100%
src\utility\lib.py MsgSpecJSONResponse.parse 1 0 0 100%
src\utility\lib.py (no function) 33 0 0 100%
src\utility\models.py (no function) 43 0 0 100%
src\utility\rediss.py NoOpBackend.get 0 0 1 100%
src\utility\rediss.py NoOpBackend.set 0 0 1 100%
src\utility\rediss.py NoOpBackend.clear 0 0 1 100%
src\utility\rediss.py NoOpBackend.get_with_ttl 0 0 1 100%
src\utility\rediss.py SafeRedisBackend.get_with_ttl 0 0 2 100%
src\utility\rediss.py lifespan_factory 2 0 0 100%
src\utility\rediss.py lifespan_factory.lifespan 21 0 0 100%
src\utility\rediss.py (no function) 16 0 10 100%
src\utility\utils.py ViewType.mark 2 0 0 100%
src\utility\utils.py ViewType.clip 2 0 0 100%
src\utility\utils.py OtherInfo.key 1 0 0 100%
src\utility\utils.py OtherInfo.title 1 0 0 100%
src\utility\utils.py OtherInfo.single_fields 1 0 0 100%
src\utility\utils.py PersonInfo.key 1 0 0 100%
src\utility\utils.py PersonInfo.title 1 0 0 100%
src\utility\utils.py Utils.get_scrape_date 1 0 0 100%
src\utility\utils.py Utils.create_filmarks_link 1 0 0 100%
src\utility\utils.py Utils.create_other_info 5 0 0 100%
src\utility\utils.py Utils.create_person_info 7 0 0 100%
src\utility\utils.py Utils.create_review_info 16 0 0 100%
src\utility\utils.py (no function) 66 0 0 100%
tests\__init__.py (no function) 0 0 0 100%
tests\anime\test_anime_api.py test_invalid_endpoint_base 4 0 0 100%
tests\anime\test_anime_api.py test_invalid_endpoint_filmarks 5 0 0 100%
tests\anime\test_anime_api.py test_scrape_error_500_server_error 7 0 0 100%
tests\anime\test_anime_api.py test_scrape_error_503_service_unavailable_session 6 0 0 100%
tests\anime\test_anime_api.py test_scrape_error_503_service_unavailable_filmarks 13 0 0 100%
tests\anime\test_anime_api.py (no function) 15 0 0 100%
tests\anime\test_anime_info.py test_info_input_not_valid_integer 5 0 0 100%
tests\anime\test_anime_info.py test_review_input_not_valid_integer 5 0 0 100%
tests\anime\test_anime_info.py test_review_input_less_than_min_threshold 5 0 0 100%
tests\anime\test_anime_info.py test_review_input_more_than_max_threshold 5 0 0 100%
tests\anime\test_anime_info.py test_info_with_results_single_1 30 0 0 100%
tests\anime\test_anime_info.py test_info_with_results_single_2 30 0 0 100%
tests\anime\test_anime_info.py test_info_with_results_single_3 31 0 0 100%
tests\anime\test_anime_info.py test_info_with_results_single_4 29 0 0 100%
tests\anime\test_anime_info.py test_info_with_results_random 17 0 0 100%
tests\anime\test_anime_info.py test_review_with_results_full 18 0 0 100%
tests\anime\test_anime_info.py test_review_with_results_specific 17 0 0 100%
tests\anime\test_anime_info.py test_review_with_results 15 0 0 100%
tests\anime\test_anime_info.py test_review_without_results 15 0 0 100%
tests\anime\test_anime_info.py test_review_with_results_random 16 0 0 100%
tests\anime\test_anime_info.py (no function) 28 0 0 100%
tests\anime\test_anime_list.py test_list_query_params_not_valid_integer 23 0 0 100%
tests\anime\test_anime_list.py test_list_query_params_less_than_min_threshold 23 0 0 100%
tests\anime\test_anime_list.py test_list_query_params_more_than_max_threshold 23 0 0 100%
tests\anime\test_anime_list.py test_list_path_vars_not_valid_integer 19 0 0 100%
tests\anime\test_anime_list.py test_list_minimum_fields_present 31 0 0 100%
tests\anime\test_anime_list.py test_list_vod_all_minimum_fields_present 16 0 0 100%
tests\anime\test_anime_list.py test_list_year_series_all_minimum_fields_present 16 0 0 100%
tests\anime\test_anime_list.py test_list_year_specific_all_minimum_fields_present 16 0 0 100%
tests\anime\test_anime_list.py test_list_year_season_all_minimum_fields_present 17 0 0 100%
tests\anime\test_anime_list.py test_list_company_all_minimum_fields_present 13 0 0 100%
tests\anime\test_anime_list.py test_list_tag_all_minimum_fields_present 13 0 0 100%
tests\anime\test_anime_list.py test_list_person_all_minimum_fields_present 13 0 0 100%
tests\anime\test_anime_list.py (no function) 22 0 0 100%
tests\anime\test_anime_search.py test_search_input_not_valid_integer 5 0 0 100%
tests\anime\test_anime_search.py test_search_input_less_than_min_threshold 5 0 0 100%
tests\anime\test_anime_search.py test_search_input_more_than_max_threshold 5 0 0 100%
tests\anime\test_anime_search.py test_search_empty_query 7 0 0 100%
tests\anime\test_anime_search.py test_search_without_results_page_1 9 0 0 100%
tests\anime\test_anime_search.py test_search_without_results_page_2 9 0 0 100%
tests\anime\test_anime_search.py test_search_with_results_single 19 0 0 100%
tests\anime\test_anime_search.py test_search_with_results_multiple 18 0 0 100%
tests\anime\test_anime_search.py test_search_with_results_random 20 0 0 100%
tests\anime\test_anime_search.py (no function) 19 0 0 100%
tests\conftest.py client_nc 3 0 0 100%
tests\conftest.py client_c 3 0 0 100%
tests\conftest.py client_c_conn_err 6 0 0 100%
tests\conftest.py client_c_serv_err 6 0 0 100%
tests\conftest.py get_json_val 3 0 0 100%
tests\conftest.py get_reviews_last_page 4 0 0 100%
tests\conftest.py (no function) 25 0 0 100%
tests\drama\test_drama_api.py test_invalid_endpoint_base 4 0 0 100%
tests\drama\test_drama_api.py test_invalid_endpoint_filmarks 5 0 0 100%
tests\drama\test_drama_api.py test_scrape_error_500_server_error 7 0 0 100%
tests\drama\test_drama_api.py test_scrape_error_503_service_unavailable_session 6 0 0 100%
tests\drama\test_drama_api.py test_scrape_error_503_service_unavailable_filmarks 13 0 0 100%
tests\drama\test_drama_api.py (no function) 15 0 0 100%
tests\drama\test_drama_info.py test_info_input_not_valid_integer 5 0 0 100%
tests\drama\test_drama_info.py test_review_input_not_valid_integer 5 0 0 100%
tests\drama\test_drama_info.py test_review_input_less_than_min_threshold 5 0 0 100%
tests\drama\test_drama_info.py test_review_input_more_than_max_threshold 5 0 0 100%
tests\drama\test_drama_info.py test_info_with_results_single_1 26 0 0 100%
tests\drama\test_drama_info.py test_info_with_results_single_2 27 0 0 100%
tests\drama\test_drama_info.py test_info_with_results_single_3 26 0 0 100%
tests\drama\test_drama_info.py test_info_with_results_single_4 24 0 0 100%
tests\drama\test_drama_info.py test_info_with_results_random 17 0 0 100%
tests\drama\test_drama_info.py test_review_with_results_full 18 0 0 100%
tests\drama\test_drama_info.py test_review_with_results_specific 17 0 0 100%
tests\drama\test_drama_info.py test_review_with_results 15 0 0 100%
tests\drama\test_drama_info.py test_review_without_results 15 0 0 100%
tests\drama\test_drama_info.py test_review_with_results_random 16 0 0 100%
tests\drama\test_drama_info.py (no function) 28 0 0 100%
tests\drama\test_drama_list.py test_list_query_params_not_valid_integer 23 0 0 100%
tests\drama\test_drama_list.py test_list_query_params_less_than_min_threshold 23 0 0 100%
tests\drama\test_drama_list.py test_list_query_params_more_than_max_threshold 23 0 0 100%
tests\drama\test_drama_list.py test_list_path_vars_not_valid_integer 19 0 0 100%
tests\drama\test_drama_list.py test_list_minimum_fields_present 31 0 0 100%
tests\drama\test_drama_list.py test_list_vod_all_minimum_fields_present 16 0 0 100%
tests\drama\test_drama_list.py test_list_year_series_all_minimum_fields_present 16 0 0 100%
tests\drama\test_drama_list.py test_list_year_specific_all_minimum_fields_present 16 0 0 100%
tests\drama\test_drama_list.py test_list_country_all_minimum_fields_present 18 0 0 100%
tests\drama\test_drama_list.py test_list_genre_all_minimum_fields_present 18 0 0 100%
tests\drama\test_drama_list.py test_list_tag_all_minimum_fields_present 13 0 0 100%
tests\drama\test_drama_list.py test_list_person_all_minimum_fields_present 13 0 0 100%
tests\drama\test_drama_list.py (no function) 22 0 0 100%
tests\drama\test_drama_search.py test_search_input_not_valid_integer 5 0 0 100%
tests\drama\test_drama_search.py test_search_input_less_than_min_threshold 5 0 0 100%
tests\drama\test_drama_search.py test_search_input_more_than_max_threshold 5 0 0 100%
tests\drama\test_drama_search.py test_search_empty_query 7 0 0 100%
tests\drama\test_drama_search.py test_search_without_results_page_1 9 0 0 100%
tests\drama\test_drama_search.py test_search_without_results_page_2 9 0 0 100%
tests\drama\test_drama_search.py test_search_with_results_single 19 0 0 100%
tests\drama\test_drama_search.py test_search_with_results_multiple 18 0 0 100%
tests\drama\test_drama_search.py test_search_with_results_random 20 0 0 100%
tests\drama\test_drama_search.py (no function) 19 0 0 100%
tests\movie\test_movie_api.py test_invalid_endpoint_base 4 0 0 100%
tests\movie\test_movie_api.py test_invalid_endpoint_filmarks 5 0 0 100%
tests\movie\test_movie_api.py test_scrape_error_500_server_error 7 0 0 100%
tests\movie\test_movie_api.py test_scrape_error_503_service_unavailable_session 6 0 0 100%
tests\movie\test_movie_api.py test_scrape_error_503_service_unavailable_filmarks 13 0 0 100%
tests\movie\test_movie_api.py (no function) 15 0 0 100%
tests\movie\test_movie_info.py test_info_input_not_valid_integer 5 0 0 100%
tests\movie\test_movie_info.py test_review_input_not_valid_integer 5 0 0 100%
tests\movie\test_movie_info.py test_review_input_less_than_min_threshold 5 0 0 100%
tests\movie\test_movie_info.py test_review_input_more_than_max_threshold 5 0 0 100%
tests\movie\test_movie_info.py test_info_with_results_single_1 21 0 0 100%
tests\movie\test_movie_info.py test_info_with_results_single_2 22 0 0 100%
tests\movie\test_movie_info.py test_info_with_results_single_3 21 0 0 100%
tests\movie\test_movie_info.py test_info_with_results_single_4 20 0 0 100%
tests\movie\test_movie_info.py test_info_with_results_random 15 0 0 100%
tests\movie\test_movie_info.py test_review_with_results_full 16 0 0 100%
tests\movie\test_movie_info.py test_review_with_results_specific 14 0 0 100%
tests\movie\test_movie_info.py test_review_with_results 13 0 0 100%
tests\movie\test_movie_info.py test_review_without_results 13 0 0 100%
tests\movie\test_movie_info.py test_review_with_results_random 14 0 0 100%
tests\movie\test_movie_info.py (no function) 28 0 0 100%
tests\movie\test_movie_list.py test_list_query_params_not_valid_integer 29 0 0 100%
tests\movie\test_movie_list.py test_list_query_params_less_than_min_threshold 29 0 0 100%
tests\movie\test_movie_list.py test_list_query_params_more_than_max_threshold 29 0 0 100%
tests\movie\test_movie_list.py test_list_path_vars_not_valid_integer 25 0 0 100%
tests\movie\test_movie_list.py test_list_minimum_fields_present 36 0 0 100%
tests\movie\test_movie_list.py test_list_vod_all_minimum_fields_present 15 0 0 100%
tests\movie\test_movie_list.py test_list_award_all_minimum_fields_present 12 0 0 100%
tests\movie\test_movie_list.py test_list_year_series_all_minimum_fields_present 15 0 0 100%
tests\movie\test_movie_list.py test_list_year_specific_all_minimum_fields_present 15 0 0 100%
tests\movie\test_movie_list.py test_list_country_all_minimum_fields_present 17 0 0 100%
tests\movie\test_movie_list.py test_list_genre_all_minimum_fields_present 12 0 0 100%
tests\movie\test_movie_list.py test_list_distributor_all_minimum_fields_present 12 0 0 100%
tests\movie\test_movie_list.py test_list_series_all_minimum_fields_present 12 0 0 100%
tests\movie\test_movie_list.py test_list_tag_all_minimum_fields_present 12 0 0 100%
tests\movie\test_movie_list.py test_list_person_all_minimum_fields_present 12 0 0 100%
tests\movie\test_movie_list.py (no function) 29 0 0 100%
tests\movie\test_movie_search.py test_search_input_not_valid_integer 5 0 0 100%
tests\movie\test_movie_search.py test_search_input_less_than_min_threshold 5 0 0 100%
tests\movie\test_movie_search.py test_search_input_more_than_max_threshold 5 0 0 100%
tests\movie\test_movie_search.py test_search_empty_query 7 0 0 100%
tests\movie\test_movie_search.py test_search_without_results_page_1 9 0 0 100%
tests\movie\test_movie_search.py test_search_without_results_page_2 9 0 0 100%
tests\movie\test_movie_search.py test_search_with_results_single 17 0 0 100%
tests\movie\test_movie_search.py test_search_with_results_multiple 18 0 0 100%
tests\movie\test_movie_search.py test_search_with_results_random 18 0 0 100%
tests\movie\test_movie_search.py (no function) 19 0 0 100%
tests\test_api.py test_api_metadata 14 0 0 100%
tests\test_api.py test_api_routes 10 0 0 100%
tests\test_api.py test_api_index 5 0 0 100%
tests\test_api.py test_api_unknown 4 0 0 100%
tests\test_api.py test_api_without_cache 9 0 0 100%
tests\test_api.py test_api_with_cache 9 0 0 100%
tests\test_api.py test_api_with_cache_connection_error 9 0 0 100%
tests\test_api.py test_api_with_cache_server_error 9 0 0 100%
tests\test_api.py (no function) 17 0 0 100%
Total   3215 0 23 100%

No items found using the specified filter.