Coverage for amazonorders/entity/shipment.py: 87.50%
32 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-14 16:09 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-14 16:09 +0000
1import logging
3from amazonorders.entity.item import Item
5__author__ = "Alex Laird"
6__copyright__ = "Copyright 2024, Alex Laird"
7__version__ = "0.0.4"
9from amazonorders.session import BASE_URL
11logger = logging.getLogger(__name__)
14class Shipment:
15 def __init__(self,
16 parsed,
17 order) -> None:
18 self.parsed = parsed
19 self.order = order
21 self.items = self._parse_items()
22 self.delivery_status = self._parse_delivery_status()
23 self.tracking_link = self._parse_tracking_link()
25 def __repr__(self) -> str:
26 return "<Shipment: \"{}\">".format(self.items)
28 def __str__(self) -> str: # pragma: no cover
29 return "Shipment: \"{}\"".format(self.items)
31 def _parse_items(self):
32 return [Item(x) for x in self.parsed.find_all("div", {"class": "yohtmlc-item"})]
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)
43 def _parse_delivery_status(self):
44 try:
45 tag = self.parsed.find("div", {"class": "js-shipment-info-container"})
46 if tag:
47 tag = tag.find("div", {"class": "a-row"})
48 return tag.text.strip()
49 except (AttributeError, IndexError):
50 logger.warning("When building Shipment, `delivery_status` could not be parsed.", exc_info=True)