Coverage for amazonorders/entity/item.py: 100.00%

44 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-16 21:17 +0000

1import logging 

2from datetime import datetime 

3 

4from amazonorders.entity.parsable import Parsable 

5from amazonorders.entity.seller import Seller 

6from amazonorders.session import BASE_URL 

7 

8__author__ = "Alex Laird" 

9__copyright__ = "Copyright 2024, Alex Laird" 

10__version__ = "0.0.5" 

11 

12logger = logging.getLogger(__name__) 

13 

14 

15class Item(Parsable): 

16 def __init__(self, 

17 parsed) -> None: 

18 super().__init__(parsed) 

19 

20 self.title = self.safe_parse(self._parse_title) 

21 self.link = self.safe_parse(self._parse_link) 

22 self.price = self.safe_parse(self._parse_price) 

23 self.seller = self.safe_parse(self._parse_seller) 

24 self.condition = self.safe_parse(self._parse_condition) 

25 self.return_eligible_date = self.safe_parse(self._parse_return_eligible_date) 

26 

27 def __repr__(self) -> str: 

28 return "<Item: \"{}\">".format(self.title) 

29 

30 def __str__(self) -> str: # pragma: no cover 

31 return "Item: \"{}\"".format(self.title) 

32 

33 def _parse_title(self): 

34 tag = self.parsed.find("a") 

35 return tag.text.strip() 

36 

37 def _parse_link(self): 

38 tag = self.parsed.find("a") 

39 return "{}{}".format(BASE_URL, tag.attrs["href"]) 

40 

41 def _parse_price(self): 

42 for tag in self.parsed.find_all("div"): 

43 if tag.text.strip().startswith("$"): 

44 return tag.text.strip().replace("$", "") 

45 

46 def _parse_seller(self): 

47 for tag in self.parsed.find_all("div"): 

48 if "Sold by:" in tag.text: 

49 return Seller(tag, order=self) 

50 

51 def _parse_condition(self): 

52 for tag in self.parsed.find_all("div"): 

53 if "Condition:" in tag.text: 

54 return tag.text.split("Condition:")[1].strip() 

55 

56 def _parse_return_eligible_date(self): 

57 for tag in self.parsed.find_all("div"): 

58 if "Return" in tag.text: 

59 split_str = "through " 

60 if "closed on " in tag.text: 

61 split_str = "closed on " 

62 date_str = tag.text.strip().split(split_str)[1] 

63 return datetime.strptime(date_str, "%b %d, %Y").date()