Coverage for amazonorders/entity/seller.py: 96.30%

27 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 

7from amazonorders.session import BASE_URL 

8 

9__author__ = "Alex Laird" 

10__copyright__ = "Copyright 2024, Alex Laird" 

11__version__ = "0.0.7" 

12 

13logger = logging.getLogger(__name__) 

14 

15 

16class Seller(Parsable): 

17 def __init__(self, 

18 parsed: Tag) -> None: 

19 super().__init__(parsed) 

20 

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

22 self.link: Optional[str] = self.safe_parse(self._parse_link) 

23 

24 def __repr__(self) -> str: 

25 return "<Seller: \"{}\">".format(self.name) 

26 

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

28 return "Seller: \"{}\"".format(self.name) 

29 

30 def _parse_name(self) -> str: 

31 tag = self.parsed.find("a") 

32 if not tag: 

33 tag = self.parsed.find("span") 

34 value = tag.text 

35 if "Sold by:" in value: 

36 value = value.split("Sold by:")[1] 

37 return value.strip() 

38 

39 def _parse_link(self) -> Optional[str]: 

40 tag = self.parsed.find("a") 

41 if tag: 

42 return "{}{}".format(BASE_URL, tag.attrs["href"]) 

43 else: 

44 return None