Source code for amazonorders.entity.recipient
__copyright__ = "Copyright (c) 2024-2025 Alex Laird"
__license__ = "MIT"
import logging
from typing import Optional
from bs4 import Tag
from amazonorders.conf import AmazonOrdersConfig
from amazonorders.entity.parsable import Parsable
logger = logging.getLogger(__name__)
[docs]
class Recipient(Parsable):
"""
The person receiving an Amazon :class:`~amazonorders.entity.order.Order`.
"""
def __init__(self,
parsed: Tag,
config: AmazonOrdersConfig) -> None:
super().__init__(parsed, config)
#: The Recipient name.
self.name: str = self.safe_simple_parse(selector=self.config.selectors.FIELD_RECIPIENT_NAME_SELECTOR,
required=True)
#: The Recipient address.
self.address: Optional[str] = self.safe_parse(self._parse_address)
def __repr__(self) -> str:
return f"<Recipient: \"{self.name}\">"
def __str__(self) -> str: # pragma: no cover
return f"Recipient: {self.name}"
def _parse_address(self) -> Optional[str]:
value = self.simple_parse(self.config.selectors.FIELD_RECIPIENT_ADDRESS1_SELECTOR)
if value:
values = [
value,
self.simple_parse(self.config.selectors.FIELD_RECIPIENT_ADDRESS2_SELECTOR),
self.simple_parse(self.config.selectors.FIELD_RECIPIENT_ADDRESS_CITY_STATE_POSTAL_SELECTOR),
self.simple_parse(self.config.selectors.FIELD_RECIPIENT_ADDRESS_COUNTRY_SELECTOR),
]
value = "\n".join(filter(None, values))
else:
value = self.simple_parse(self.config.selectors.FIELD_RECIPIENT_ADDRESS_FALLBACK_SELECTOR)
return value