Coverage for src\scrape\search\search_movie_scraper.py: 100%

37 statements  

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

1from bs4 import BeautifulSoup 

2from src.scrape.search.search_scraper import SearchScraper 

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 SearchMovieScraper(SearchScraper): 

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.DIRECTOR, 

20 PersonInfo.SCRIPTWRITER, 

21 PersonInfo.CAST, 

22 ] 

23 

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

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

26 

27 def set_search_results(self) -> None: 

28 self.search_heading = self._get_heading() 

29 

30 movies = [] 

31 

32 if not self._is_results_empty(): 

33 results = self._get_results_container() 

34 

35 for ctr, result in enumerate(results[:int(self.results_limit)]): 

36 m = {} 

37 

38 m["title"] = self._get_title(result) 

39 m["rating"] = self._get_rating(result) 

40 

41 data_mark = self._get_data_mark(result) 

42 m["mark_count"] = data_mark.count 

43 

44 data_clip = self._get_data_clip(result) 

45 m["clip_count"] = data_clip.count 

46 m["movie_id"] = data_clip.movie_id 

47 

48 m["link"] = Utils.create_filmarks_link(Endpoint.INFO_MOVIES.value.path.format( 

49 movie_id=data_clip.movie_id, 

50 )) 

51 

52 if poster := self._get_poster(result): 

53 m["poster"] = poster 

54 

55 for field in self.OTHER_INFO_FIELDS: 

56 value = self._get_other_info(result, field) 

57 if value: m[field.key] = value 

58 

59 for field in self.PERSON_INFO_FIELDS: 

60 value = self._get_person_info(result, field) 

61 if value: m[field.key] = value 

62 

63 Logger.info(self.get_logging(idx=ctr + 1, text=m)) 

64 movies.append(m) 

65 

66 self.search_results["movies"] = movies