Coverage for src\scrape\scrape_service.py: 100%

59 statements  

« prev     ^ index     » next       coverage.py v7.10.1, created at 2025-10-19 21:13 +0800

1from fastapi import HTTPException, Request 

2from src.scrape.info.info_anime_scraper import InfoAnimeScraper 

3from src.scrape.info.info_drama_scraper import InfoDramaScraper 

4from src.scrape.info.info_movie_scraper import InfoMovieScraper 

5from src.scrape.search.search_anime_scraper import SearchAnimeScraper 

6from src.scrape.search.search_drama_scraper import SearchDramaScraper 

7from src.scrape.search.search_movie_scraper import SearchMovieScraper 

8from src.utility.endpoints import Endpoint 

9from src.utility.lib import CustomException, Logger 

10from src.utility.utils import ViewType 

11from typing import Any, Dict 

12 

13 

14def search_scrape(endpoint: Endpoint, req: Request, message: str) -> Dict[str, Any]: 

15 try: 

16 match endpoint.value.view: 

17 case ViewType.ANIME: 

18 scraper = SearchAnimeScraper.scrape(endpoint, req) 

19 

20 case ViewType.DRAMA: 

21 scraper = SearchDramaScraper.scrape(endpoint, req) 

22 

23 case ViewType.MOVIE: 

24 scraper = SearchMovieScraper.scrape(endpoint, req) 

25 

26 case _: # pragma: no cover 

27 raise ValueError(f"Unexpected ViewType: {endpoint.value.view}") 

28 

29 scraper.set_search_results() 

30 return scraper.get_response() 

31 

32 except HTTPException: 

33 raise 

34 

35 except Exception: 

36 Logger.exception(message) 

37 raise CustomException.server_error() 

38 

39 

40def info_scrape(endpoint: Endpoint, req: Request, message: str) -> Dict[str, Any]: 

41 try: 

42 match endpoint.value.view: 

43 case ViewType.ANIME: 

44 scraper = InfoAnimeScraper.scrape(endpoint, req) 

45 

46 case ViewType.DRAMA: 

47 scraper = InfoDramaScraper.scrape(endpoint, req) 

48 

49 case ViewType.MOVIE: 

50 scraper = InfoMovieScraper.scrape(endpoint, req) 

51 

52 case _: # pragma: no cover 

53 raise ValueError(f"Unexpected ViewType: {endpoint.value.view}") 

54 

55 scraper.set_info_data() 

56 return scraper.get_response() 

57 

58 except HTTPException: 

59 raise 

60 

61 except Exception: 

62 Logger.exception(message) 

63 raise CustomException.server_error() 

64 

65 

66def review_scrape(endpoint: Endpoint, req: Request, message: str) -> Dict[str, Any]: 

67 try: 

68 match endpoint.value.view: 

69 case ViewType.ANIME: 

70 scraper = InfoAnimeScraper.scrape(endpoint, req) 

71 

72 case ViewType.DRAMA: 

73 scraper = InfoDramaScraper.scrape(endpoint, req) 

74 

75 case ViewType.MOVIE: 

76 scraper = InfoMovieScraper.scrape(endpoint, req) 

77 

78 case _: # pragma: no cover 

79 raise ValueError(f"Unexpected ViewType: {endpoint.value.view}") 

80 

81 scraper.set_review_data() 

82 return scraper.get_response() 

83 

84 except HTTPException: 

85 raise 

86 

87 except Exception: 

88 Logger.exception(message) 

89 raise CustomException.server_error()