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

33 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-16 23:55 +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__ = "0.0.7" 

11 

12logger = logging.getLogger(__name__) 

13 

14 

15class Recipient(Parsable): 

16 def __init__(self, 

17 parsed: Tag) -> None: 

18 super().__init__(parsed) 

19 

20 self.name: str = self.safe_parse(self._parse_name) 

21 self.address: Optional[str] = self.safe_parse(self._parse_address) 

22 

23 def __repr__(self) -> str: 

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

25 

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

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

28 

29 def _parse_name(self) -> str: 

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

31 if not tag: 

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

33 return tag.text.strip() 

34 

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

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

37 if tag: 

38 value = tag.text.strip() 

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

40 if next_tag: 

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

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

43 if next_tag: 

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

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

46 if next_tag: 

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

48 else: 

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

50 return value.strip()