Coverage for amazonorders/entity/recipient.py: 96.97%
33 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-18 21:57 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-18 21:57 +0000
1import logging
2from typing import Optional
4from bs4 import Tag
6from amazonorders.entity.parsable import Parsable
8__author__ = "Alex Laird"
9__copyright__ = "Copyright 2024, Alex Laird"
10__version__ = "1.0.0"
12logger = logging.getLogger(__name__)
15class Recipient(Parsable):
16 """
17 The person receiving an Amazon `~amazonorders.entity.order.Order`.
18 """
20 def __init__(self,
21 parsed: Tag) -> None:
22 super().__init__(parsed)
24 #: The Recipient name.
25 self.name: str = self.safe_parse(self._parse_name)
26 #: The Recipient address.
27 self.address: Optional[str] = self.safe_parse(self._parse_address)
29 def __repr__(self) -> str:
30 return "<Recipient: \"{}\">".format(self.name)
32 def __str__(self) -> str: # pragma: no cover
33 return "Recipient: \"{}\"".format(self.name)
35 def _parse_name(self) -> str:
36 tag = self.parsed.find("li", {"class": "displayAddressFullName"})
37 if not tag:
38 tag = self.parsed.find_all("div")[1]
39 return tag.text.strip()
41 def _parse_address(self) -> Optional[str]:
42 tag = self.parsed.find("li", {"class": "displayAddressAddressLine1"})
43 if tag:
44 value = tag.text.strip()
45 next_tag = self.parsed.find("li", {"class": "displayAddressAddressLine2"})
46 if next_tag:
47 value += "{}\n{}".format(tag.text.strip(), next_tag)
48 next_tag = self.parsed.find("li", {"class": "displayAddressCityStateOrRegionPostalCode"})
49 if next_tag:
50 value += "\n{}".format(next_tag.text.strip())
51 next_tag = self.parsed.find("li", {"class": "displayAddressCountryName"})
52 if next_tag:
53 value += "\n{}".format(next_tag.text.strip())
54 else:
55 value = self.parsed.find_all("div")[2].text
56 return value.strip()