Coverage for amazonorders/entity/shipment.py: 100.00%
25 statements
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-07 21:56 +0000
« prev ^ index » next coverage.py v7.4.1, created at 2024-02-07 21:56 +0000
1import logging
2from typing import List, Optional
4from bs4 import Tag
6from amazonorders import constants
7from amazonorders.constants import ITEM_ENTITY_SELECTOR
8from amazonorders.entity.item import Item
9from amazonorders.entity.parsable import Parsable
11__author__ = "Alex Laird"
12__copyright__ = "Copyright 2024, Alex Laird"
13__version__ = "1.0.7"
15logger = logging.getLogger(__name__)
18class Shipment(Parsable):
19 """
20 An Amazon Shipment, which should contain one or more :class:`~amazonorders.entity.item.Item`'s.
21 """
23 def __init__(self,
24 parsed: Tag) -> None:
25 super().__init__(parsed)
27 #: The Shipment Items.
28 self.items: List[Item] = self._parse_items()
29 #: The Shipment delivery status.
30 self.delivery_status: Optional[str] = self.safe_simple_parse(
31 selector=constants.FIELD_SHIPMENT_DELIVERY_STATUS_SELECTOR)
32 #: The Shipment tracking link.
33 self.tracking_link: Optional[str] = self.safe_simple_parse(
34 selector=constants.FIELD_SHIPMENT_TRACKING_LINK_SELECTOR,
35 link=True)
37 def __repr__(self) -> str:
38 return "<Shipment: \"{}\">".format(self.items)
40 def __str__(self) -> str: # pragma: no cover
41 return "Shipment: {}".format(self.items)
43 def __lt__(self, other):
44 if self.delivery_status:
45 return self.delivery_status < str(other.delivery_status if other.delivery_status else "")
46 else:
47 return str(self.items) < str(other.items)
49 def _parse_items(self) -> List[Item]:
50 items = [Item(x) for x in self.parsed.select(ITEM_ENTITY_SELECTOR)]
51 items.sort()
52 return items