Coverage for amazonorders/entity/recipient.py: 96.97%
33 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 Optional
4from bs4 import Tag
6from amazonorders.entity.parsable import Parsable
8__author__ = "Alex Laird"
9__copyright__ = "Copyright 2024, Alex Laird"
10__version__ = "0.0.7"
12logger = logging.getLogger(__name__)
15class Recipient(Parsable):
16 def __init__(self,
17 parsed: Tag) -> None:
18 super().__init__(parsed)
20 self.name: str = self.safe_parse(self._parse_name)
21 self.address: Optional[str] = self.safe_parse(self._parse_address)
23 def __repr__(self) -> str:
24 return "<Recipient: \"{}\">".format(self.name)
26 def __str__(self) -> str: # pragma: no cover
27 return "Recipient: \"{}\"".format(self.name)
29 def _parse_name(self) -> str:
30 tag = self.parsed.find("li", {"class": "displayAddressFullName"})
31 if not tag:
32 tag = self.parsed.find_all("div")[1]
33 return tag.text.strip()
35 def _parse_address(self) -> Optional[str]:
36 tag = self.parsed.find("li", {"class": "displayAddressAddressLine1"})
37 if tag:
38 value = tag.text.strip()
39 next_tag = self.parsed.find("li", {"class": "displayAddressAddressLine2"})
40 if next_tag:
41 value += "{}\n{}".format(tag.text.strip(), next_tag)
42 next_tag = self.parsed.find("li", {"class": "displayAddressCityStateOrRegionPostalCode"})
43 if next_tag:
44 value += "\n{}".format(next_tag.text.strip())
45 next_tag = self.parsed.find("li", {"class": "displayAddressCountryName"})
46 if next_tag:
47 value += "\n{}".format(next_tag.text.strip())
48 else:
49 value = self.parsed.find_all("div")[2].text
50 return value.strip()