Coverage for amazonorders/entity/shipment.py: 100.00%
30 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-16 23:55 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-16 23:55 +0000
1import logging
2from typing import List, Optional
4from bs4 import Tag
6from amazonorders.entity.item import Item
7from amazonorders.entity.parsable import Parsable
8from amazonorders.session import BASE_URL
10__author__ = "Alex Laird"
11__copyright__ = "Copyright 2024, Alex Laird"
12__version__ = "0.0.7"
14logger = logging.getLogger(__name__)
17class Shipment(Parsable):
18 def __init__(self,
19 parsed: Tag) -> None:
20 super().__init__(parsed)
22 self.items: List[Item] = self._parse_items()
23 self.delivery_status: Optional[str] = self.safe_parse(self._parse_delivery_status)
24 self.tracking_link: Optional[str] = self.safe_parse(self._parse_tracking_link)
26 def __repr__(self) -> str:
27 return "<Shipment: \"{}\">".format(self.items)
29 def __str__(self) -> str: # pragma: no cover
30 return "Shipment: \"{}\"".format(self.items)
32 def _parse_items(self) -> List[Item]:
33 return [Item(x) for x in self.parsed.find_all("div", {"class": "yohtmlc-item"})]
35 def _parse_delivery_status(self) -> Optional[str]:
36 tag = self.parsed.find("div", {"class": "js-shipment-info-container"})
37 if tag:
38 tag = tag.find("div", {"class": "a-row"})
39 return tag.text.strip()
40 else:
41 return None
43 def _parse_tracking_link(self) -> Optional[str]:
44 tag = self.parsed.find("span", {"class": "track-package-button"})
45 if tag:
46 link_tag = tag.find("a")
47 return "{}{}".format(BASE_URL, link_tag.attrs["href"])
48 else:
49 return None