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

27 statements  

« prev     ^ index     » next       coverage.py v7.4.0, created at 2024-01-24 18:41 +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__ = "1.0.0" 

12 

13logger = logging.getLogger(__name__) 

14 

15 

16class Seller(Parsable): 

17 """ 

18 An Amazon Seller of an Amazon `~amazonorders.entity.item.Item`. 

19 """ 

20 

21 def __init__(self, 

22 parsed: Tag) -> None: 

23 super().__init__(parsed) 

24 

25 #: The Seller name. 

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

27 #: The Seller link. 

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

29 

30 def __repr__(self) -> str: 

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

32 

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

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

35 

36 def _parse_name(self) -> str: 

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

38 if not tag: 

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

40 value = tag.text 

41 if "Sold by:" in value: 

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

43 return value.strip() 

44 

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

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

47 if tag: 

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

49 else: 

50 return None