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

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

10 OTHER_INFO_FIELDS: List[OtherInfo] = [ 

11 OtherInfo.RELEASE_DATE, 

12 OtherInfo.PLAYBACK_TIME, 

13 OtherInfo.COUNTRY_OF_ORIGIN, 

14 OtherInfo.GENRE, 

15 ] 

16 

17 PERSON_INFO_FIELDS: List[PersonInfo] = [ 

18 PersonInfo.EXECUTIVE_PRODUCER_2, 

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 dramas = [] 

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 d = {} 

37 

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

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

40 

41 data_mark = self._get_data_mark(result) 

42 d["mark_count"] = data_mark.count 

43 

44 data_clip = self._get_data_clip(result) 

45 d["clip_count"] = data_clip.count 

46 d["series_id"] = data_clip.drama_series_id 

47 d["season_id"] = data_clip.drama_season_id 

48 

49 d["link"] = Utils.create_filmarks_link(Endpoint.INFO_DRAMAS.value.path.format( 

50 drama_series_id=data_clip.drama_series_id, 

51 drama_season_id=data_clip.drama_season_id, 

52 )) 

53 

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

55 d["poster"] = poster 

56 

57 for field in self.OTHER_INFO_FIELDS: 

58 value = self._get_other_info(result, field) 

59 if value: d[field.key] = value 

60 

61 for field in self.PERSON_INFO_FIELDS: 

62 value = self._get_person_info(result, field) 

63 if value: d[field.key] = value 

64 

65 Logger.info(self.get_logging(idx=ctr + 1, text=d)) 

66 dramas.append(d) 

67 

68 self.search_results["dramas"] = dramas