Coverage for amazonorders/entity/item.py: 100.00%
44 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-16 15:31 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-16 15:31 +0000
1import logging
2from datetime import datetime
4from amazonorders.entity.parsable import Parsable
5from amazonorders.entity.seller import Seller
6from amazonorders.session import BASE_URL
8__author__ = "Alex Laird"
9__copyright__ = "Copyright 2024, Alex Laird"
10__version__ = "0.0.5"
12logger = logging.getLogger(__name__)
15class Item(Parsable):
16 def __init__(self,
17 parsed) -> None:
18 super().__init__(parsed)
20 self.title = self._safe_parse(self._parse_title)
21 self.link = self._safe_parse(self._parse_link)
22 self.price = self._safe_parse(self._parse_price)
23 self.seller = self._safe_parse(self._parse_seller)
24 self.condition = self._safe_parse(self._parse_condition)
25 self.return_eligible_date = self._safe_parse(self._parse_return_eligible_date)
27 def __repr__(self) -> str:
28 return "<Item: \"{}\">".format(self.title)
30 def __str__(self) -> str: # pragma: no cover
31 return "Item: \"{}\"".format(self.title)
33 def _parse_title(self):
34 tag = self.parsed.find("a")
35 return tag.text.strip()
37 def _parse_link(self):
38 tag = self.parsed.find("a")
39 return "{}{}".format(BASE_URL, tag.attrs["href"])
41 def _parse_price(self):
42 for tag in self.parsed.find_all("div"):
43 if tag.text.strip().startswith("$"):
44 return tag.text.strip().replace("$", "")
46 def _parse_seller(self):
47 for tag in self.parsed.find_all("div"):
48 if "Sold by:" in tag.text:
49 return Seller(tag, order=self)
51 def _parse_condition(self):
52 for tag in self.parsed.find_all("div"):
53 if "Condition:" in tag.text:
54 return tag.text.split("Condition:")[1].strip()
56 def _parse_return_eligible_date(self):
57 for tag in self.parsed.find_all("div"):
58 if "Return" in tag.text:
59 split_str = "through "
60 if "closed on " in tag.text:
61 split_str = "closed on "
62 date_str = tag.text.strip().split(split_str)[1]
63 return datetime.strptime(date_str, "%b %d, %Y").date()