Coverage for amazonorders/entity/recipient.py: 100.00%

21 statements  

« prev     ^ index     » next       coverage.py v7.4.1, created at 2024-01-29 14:37 +0000

1import logging 

2from typing import Optional 

3 

4from bs4 import Tag 

5 

6from amazonorders import constants 

7from amazonorders.entity.parsable import Parsable 

8 

9__author__ = "Alex Laird" 

10__copyright__ = "Copyright 2024, Alex Laird" 

11__version__ = "1.0.7" 

12 

13logger = logging.getLogger(__name__) 

14 

15 

16class Recipient(Parsable): 

17 """ 

18 The person receiving an Amazon `~amazonorders.entity.order.Order`. 

19 """ 

20 

21 def __init__(self, 

22 parsed: Tag) -> None: 

23 super().__init__(parsed) 

24 

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) 

29 

30 def __repr__(self) -> str: 

31 return "<Recipient: \"{}\">".format(self.name) 

32 

33 def __str__(self) -> str: # pragma: no cover 

34 return "Recipient: {}".format(self.name) 

35 

36 def _parse_address(self) -> Optional[str]: 

37 value = self.simple_parse(constants.FIELD_RECIPIENT_ADDRESS1_SELECTOR) 

38 

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) 

49 

50 return value