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

56 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 InfoMovieScraper(InfoScraper): 

10 OTHER_INFO_FIELDS: List[OtherInfo] = [ 

11 OtherInfo.SCREENING_DATE, 

12 OtherInfo.SCREENING_TIME, 

13 OtherInfo.COUNTRY_OF_ORIGIN, 

14 OtherInfo.GENRE, 

15 OtherInfo.DISTRIBUTOR, 

16 ] 

17 

18 PERSON_INFO_FIELDS: List[PersonInfo] = [ 

19 PersonInfo.CREATOR, 

20 PersonInfo.DIRECTOR, 

21 PersonInfo.SCRIPTWRITER, 

22 PersonInfo.ARTIST, 

23 PersonInfo.CAST, 

24 ] 

25 

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

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

28 

29 self.movie_id = int(self.params.get("movie_id")) 

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

31 

32 def set_info_data(self) -> None: 

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

34 

35 if original_title := self._get_original_title(): 

36 self.data["original_title"] = original_title 

37 

38 if synopsis := self._get_synopsis(): 

39 self.data["synopsis"] = synopsis 

40 

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

42 

43 data_mark = self._get_data_mark() 

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

45 

46 data_clip = self._get_data_clip() 

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

48 

49 self.data["movie_id"] = self.movie_id 

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

51 

52 if official_site := self._get_official_site(): 

53 self.data["official_site"] = official_site 

54 

55 if poster := self._get_poster(): 

56 self.data["poster"] = poster 

57 

58 if production_year := self._get_production_year(): 

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

60 

61 for field in self.OTHER_INFO_FIELDS: 

62 value = self._get_other_info(field) 

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

64 

65 for field in self.PERSON_INFO_FIELDS: 

66 value = self._get_person_info(field) 

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

68 

69 Logger.info(self.get_logging(id=[self.movie_id], text=self.data)) 

70 

71 def set_review_data(self) -> None: 

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

73 

74 if original_title := self._get_original_title(): 

75 self.data["original_title"] = original_title 

76 

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

78 

79 self.data["movie_id"] = self.movie_id 

80 if self.review_id != -1: 

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

82 

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

84 Endpoint.REVIEW_SPECIFIC_MOVIES.value.path.format( 

85 movie_id=self.movie_id, 

86 review_id = self.review_id 

87 ) 

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

89 

90 if self.review_id != -1: 

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

92 Logger.info(self.get_logging(id=[self.movie_id, self.review_id], text=self.data)) 

93 

94 else: 

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

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

97 Logger.warn(self.get_logging(id=[self.movie_id], text=condition.text)) 

98 

99 else: 

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

101 Logger.info(self.get_logging(id=[self.movie_id], text=self.data))