Coverage for amazonorders/entity/shipment.py: 40.00%

30 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-12 15:20 +0000

1import logging 

2 

3from amazonorders.entity.item import Item 

4 

5__author__ = "Alex Laird" 

6__copyright__ = "Copyright 2024, Alex Laird" 

7__version__ = "0.0.3" 

8 

9from amazonorders.session import BASE_URL 

10 

11logger = logging.getLogger(__name__) 

12 

13 

14class Shipment: 

15 def __init__(self, 

16 parsed, 

17 order) -> None: 

18 self.parsed = parsed 

19 self.order = order 

20 

21 self.items = self._parse_items() 

22 self.delivery_status = self._parse_delivery_status() 

23 self.tracking_link = self._parse_tracking_link() 

24 

25 def __repr__(self) -> str: 

26 return "<Shipment: \"{}\">".format(self.items) 

27 

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

29 return "Shipment: \"{}\"".format(self.items) 

30 

31 def _parse_items(self): 

32 return [Item(x) for x in self.parsed.find_all("div", {"class": "yohtmlc-item"})] 

33 

34 def _parse_tracking_link(self): 

35 try: 

36 tag = self.parsed.find("span", {"class": "track-package-button"}) 

37 if tag: 

38 link_tag = tag.find("a") 

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

40 except (AttributeError, IndexError): 

41 logger.warning("When building Shipment, `tracking_link` could not be parsed.", exc_info=True) 

42 

43 def _parse_delivery_status(self): 

44 try: 

45 tag = self.parsed.find("div", {"class": "js-shipment-info-container"}).find("div", {"class": "a-row"}) 

46 return tag.text.strip() 

47 except (AttributeError, IndexError): 

48 logger.warning("When building Shipment, `delivery_status` could not be parsed.", exc_info=True)