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

36 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-12 15:20 +0000

1import logging 

2 

3__author__ = "Alex Laird" 

4__copyright__ = "Copyright 2024, Alex Laird" 

5__version__ = "0.0.3" 

6 

7logger = logging.getLogger(__name__) 

8 

9 

10class Recipient: 

11 def __init__(self, 

12 parsed) -> None: 

13 self.parsed = parsed 

14 

15 self.name = self._parse_name() 

16 self.address = self._parse_address() 

17 

18 def __repr__(self) -> str: 

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

20 

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

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

23 

24 def _parse_name(self): 

25 try: 

26 tag = self.parsed.find("li", {"class": "displayAddressFullName"}) 

27 if not tag: 

28 tag = self.parsed.find_all("div")[1] 

29 return tag.text.strip() 

30 except (AttributeError, IndexError): 

31 logger.warning("When building Recipient, `name` could not be parsed.", exc_info=True) 

32 

33 def _parse_address(self): 

34 try: 

35 tag = self.parsed.find("li", {"class": "displayAddressAddressLine1"}) 

36 if tag: 

37 value = tag.text.strip() 

38 next_tag = self.parsed.find("li", {"class": "displayAddressAddressLine2"}) 

39 if next_tag: 

40 value += "{}\n{}".format(tag.text.strip(), next_tag) 

41 next_tag = self.parsed.find("li", {"class": "displayAddressCityStateOrRegionPostalCode"}) 

42 if next_tag: 

43 value += "\n{}".format(next_tag.text.strip()) 

44 next_tag = self.parsed.find("li", {"class": "displayAddressCountryName"}) 

45 if next_tag: 

46 value += "\n{}".format(next_tag.text.strip()) 

47 else: 

48 value = self.parsed.find_all("div")[2].text 

49 return value.strip() 

50 except (AttributeError, IndexError): 

51 logger.warning("When building Recipient, `address` could not be parsed.", exc_info=True)