Coverage for amazonorders/entity/recipient.py: 100.00%
21 statements
« prev ^ index » next coverage.py v7.4.1, created at 2024-01-30 14:24 +0000
« prev ^ index » next coverage.py v7.4.1, created at 2024-01-30 14:24 +0000
1import logging
2from typing import Optional
4from bs4 import Tag
6from amazonorders import constants
7from amazonorders.entity.parsable import Parsable
9__author__ = "Alex Laird"
10__copyright__ = "Copyright 2024, Alex Laird"
11__version__ = "1.0.7"
13logger = logging.getLogger(__name__)
16class Recipient(Parsable):
17 """
18 The person receiving an Amazon `~amazonorders.entity.order.Order`.
19 """
21 def __init__(self,
22 parsed: Tag) -> None:
23 super().__init__(parsed)
25 #: The Recipient name.
26 self.name: str = self.safe_simple_parse(selector=constants.FIELD_RECIPIENT_NAME_SELECTOR, required=True)
27 #: The Recipient address.
28 self.address: Optional[str] = self.safe_parse(self._parse_address)
30 def __repr__(self) -> str:
31 return "<Recipient: \"{}\">".format(self.name)
33 def __str__(self) -> str: # pragma: no cover
34 return "Recipient: {}".format(self.name)
36 def _parse_address(self) -> Optional[str]:
37 value = self.simple_parse(constants.FIELD_RECIPIENT_ADDRESS1_SELECTOR)
39 if value:
40 values = [
41 value,
42 self.simple_parse(constants.FIELD_RECIPIENT_ADDRESS2_SELECTOR),
43 self.simple_parse(constants.FIELD_RECIPIENT_ADDRESS_CITY_STATE_POSTAL_SELECTOR),
44 self.simple_parse(constants.FIELD_RECIPIENT_ADDRESS_COUNTRY_SELECTOR),
45 ]
46 value = "\n".join(filter(None, values))
47 else:
48 value = self.simple_parse(constants.FIELD_RECIPIENT_ADDRESS_FALLBACK_SELECTOR)
50 return value