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

1import logging 

2from typing import Optional 

3 

4from bs4 import Tag 

5 

6from amazonorders.entity.parsable import Parsable 

7 

8__author__ = "Alex Laird" 

9__copyright__ = "Copyright 2024, Alex Laird" 

10__version__ = "1.0.0" 

11 

12logger = logging.getLogger(__name__) 

13 

14 

15class Recipient(Parsable): 

16 """ 

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

18 """ 

19 

20 def __init__(self, 

21 parsed: Tag) -> None: 

22 super().__init__(parsed) 

23 

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) 

28 

29 def __repr__(self) -> str: 

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

31 

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

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

34 

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() 

40 

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()