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

27 statements  

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

1import logging 

2 

3from amazonorders.entity.item import Item 

4from amazonorders.entity.parsable import Parsable 

5 

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 Shipment(Parsable): 

16 def __init__(self, 

17 parsed, 

18 order) -> None: 

19 super().__init__(parsed) 

20 

21 self.order = order 

22 

23 self.items = self._parse_items() 

24 self.delivery_status = self._safe_parse(self._parse_delivery_status) 

25 self.tracking_link = self._safe_parse(self._parse_tracking_link) 

26 

27 def __repr__(self) -> str: 

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

29 

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

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

32 

33 def _parse_items(self): 

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

35 

36 def _parse_delivery_status(self): 

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

38 if tag: 

39 tag = tag.find("div", {"class": "a-row"}) 

40 return tag.text.strip() 

41 

42 def _parse_tracking_link(self): 

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

44 if tag: 

45 link_tag = tag.find("a") 

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