Coverage for amazonorders/entity/seller.py: 100.00%
27 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-25 22:50 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-25 22:50 +0000
1import logging
2from typing import Optional
4from bs4 import Tag
6from amazonorders.entity.parsable import Parsable
7from amazonorders.session import BASE_URL
9__author__ = "Alex Laird"
10__copyright__ = "Copyright 2024, Alex Laird"
11__version__ = "1.0.0"
13logger = logging.getLogger(__name__)
16class Seller(Parsable):
17 """
18 An Amazon Seller of an Amazon `~amazonorders.entity.item.Item`.
19 """
21 def __init__(self,
22 parsed: Tag) -> None:
23 super().__init__(parsed)
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)
30 def __repr__(self) -> str:
31 return "<Seller: \"{}\">".format(self.name)
33 def __str__(self) -> str: # pragma: no cover
34 return "Seller: {}".format(self.name)
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()
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