Coverage for src\scrape\info\info_anime_scraper.py: 100%

59 statements  

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

1from bs4 import BeautifulSoup 

2from src.scrape.info.info_scraper import InfoScraper 

3from src.utility.endpoints import Endpoint 

4from src.utility.lib import Logger 

5from src.utility.utils import OtherInfo, PersonInfo, Utils, ViewType 

6from typing import Dict, List 

7 

8 

9class InfoAnimeScraper(InfoScraper): 

10 OTHER_INFO_FIELDS: List[OtherInfo] = [ 

11 OtherInfo.RELEASE_DATE, 

12 OtherInfo.PLAYBACK_TIME, 

13 OtherInfo.COUNTRY_OF_ORIGIN, 

14 OtherInfo.PRODUCTION_COMPANY, 

15 ] 

16 

17 PERSON_INFO_FIELDS: List[PersonInfo] = [ 

18 PersonInfo.CREATOR, 

19 PersonInfo.PLANNER, 

20 PersonInfo.PRODUCER_1, 

21 PersonInfo.EXECUTIVE_PRODUCER_1, 

22 PersonInfo.CHIEF_DIRECTOR, 

23 PersonInfo.DIRECTOR, 

24 PersonInfo.SERIES_COMPOSER, 

25 PersonInfo.SCRIPTWRITER, 

26 PersonInfo.CHARACTER_ORIGINAL_DESIGNER, 

27 PersonInfo.CHARACTER_DESIGNER, 

28 PersonInfo.NARRATOR, 

29 PersonInfo.ARTIST, 

30 PersonInfo.CAST, 

31 ] 

32 

33 def __init__(self, soup: BeautifulSoup, params: Dict, view: ViewType) -> None: 

34 super().__init__(soup, params, view) 

35 

36 self.series_id = int(self.params.get("anime_series_id")) 

37 self.season_id = int(self.params.get("anime_season_id")) 

38 self.review_id = int(self.params.get("review_id", -1)) 

39 

40 def set_info_data(self) -> None: 

41 self.data["title"] = self._get_title() 

42 

43 if original_title := self._get_original_title(): 

44 self.data["original_title"] = original_title 

45 

46 if synopsis := self._get_synopsis(): 

47 self.data["synopsis"] = synopsis 

48 

49 self.data["rating"] = self._get_rating() 

50 

51 data_mark = self._get_data_mark() 

52 self.data["mark_count"] = data_mark.count 

53 

54 data_clip = self._get_data_clip() 

55 self.data["clip_count"] = data_clip.count 

56 

57 self.data["series_id"] = self.series_id 

58 self.data["season_id"] = self.season_id 

59 self.data["link"] = self._get_link() 

60 

61 if official_site := self._get_official_site(): 

62 self.data["official_site"] = official_site 

63 

64 if poster := self._get_poster(): 

65 self.data["poster"] = poster 

66 

67 if production_year := self._get_production_year(): 

68 self.data["production_year_link"], self.data["production_year"] = production_year 

69 

70 for field in self.OTHER_INFO_FIELDS: 

71 value = self._get_other_info(field) 

72 if value: self.data[field.key] = value 

73 

74 for field in self.PERSON_INFO_FIELDS: 

75 value = self._get_person_info(field) 

76 if value: self.data[field.key] = value 

77 

78 Logger.info(self.get_logging(id=[self.series_id, self.season_id], text=self.data)) 

79 

80 def set_review_data(self) -> None: 

81 self.data["title"] = self._get_title() 

82 

83 if original_title := self._get_original_title(): 

84 self.data["original_title"] = original_title 

85 

86 self.data["rating"] = self._get_rating() 

87 

88 self.data["series_id"] = self.series_id 

89 self.data["season_id"] = self.season_id 

90 if self.review_id != -1: 

91 self.data["review_id"] = self.review_id 

92 

93 self.data["link"] = Utils.create_filmarks_link( 

94 Endpoint.REVIEW_SPECIFIC_ANIMES.value.path.format( 

95 anime_series_id=self.series_id, 

96 anime_season_id=self.season_id, 

97 review_id = self.review_id 

98 ) 

99 ) if self.review_id != -1 else self._get_link() 

100 

101 if self.review_id != -1: 

102 self.data["review"] = self._get_review() 

103 Logger.info(self.get_logging(id=[self.series_id, self.season_id, self.review_id], text=self.data)) 

104 

105 else: 

106 if (condition := self._is_reviews_empty()): 

107 self.data["reviews"] = [] 

108 Logger.warn(self.get_logging(id=[self.series_id, self.season_id], text=condition.text)) 

109 

110 else: 

111 self.data["reviews"] = self._get_review_info() 

112 Logger.info(self.get_logging(id=[self.series_id, self.season_id], text=self.data))