Source code for amazonorders.entity.item

__copyright__ = "Copyright (c) 2024-2025 Alex Laird"
__license__ = "MIT"

import logging
from datetime import date
from typing import Optional, TypeVar

from bs4 import Tag

from amazonorders.conf import AmazonOrdersConfig
from amazonorders.entity.parsable import Parsable
from amazonorders.entity.seller import Seller

logger = logging.getLogger(__name__)

ItemEntity = TypeVar("ItemEntity", bound="Item")


[docs] class Item(Parsable): """ An Item in an Amazon :class:`~amazonorders.entity.order.Order`. If desired fields are populated as ``None``, ensure ``full_details`` is ``True`` when retrieving the Order (for instance, with :func:`~amazonorders.orders.AmazonOrders.get_order_history`), since by default it is ``False`` (it will slow down querying). """ def __init__(self, parsed: Tag, config: AmazonOrdersConfig) -> None: super().__init__(parsed, config) #: The Item title. self.title: str = self.safe_simple_parse(selector=self.config.selectors.FIELD_ITEM_TITLE_SELECTOR, required=True) #: The Item link. self.link: str = self.safe_simple_parse(selector=self.config.selectors.FIELD_ITEM_LINK_SELECTOR, attr_name="href", required=True) #: The Item price. self.price: Optional[float] = self.to_currency( self.safe_simple_parse(selector=self.config.selectors.FIELD_ITEM_PRICE_SELECTOR) ) #: The Item Seller. self.seller: Optional[Seller] = self.safe_simple_parse( selector=self.config.selectors.FIELD_ITEM_SELLER_SELECTOR, text_contains="Sold by:", wrap_tag=Seller) #: The Item condition. self.condition: Optional[str] = self.safe_simple_parse( selector=self.config.selectors.FIELD_ITEM_TAG_ITERATOR_SELECTOR, prefix_split="Condition:") #: The Item return eligible date. self.return_eligible_date: Optional[date] = self.safe_simple_parse( selector=self.config.selectors.FIELD_ITEM_RETURN_SELECTOR, text_contains="Return", parse_date=True) #: The Item image URL. self.image_link: Optional[str] = self.safe_simple_parse( selector=self.config.selectors.FIELD_ITEM_IMG_LINK_SELECTOR, attr_name="src") #: The Item quantity. self.quantity: Optional[int] = self.safe_simple_parse( selector=self.config.selectors.FIELD_ITEM_QUANTITY_SELECTOR) def __repr__(self) -> str: return f"<Item: \"{self.title}\">" def __str__(self) -> str: # pragma: no cover return f"Item: {self.title}" def __lt__(self, other: ItemEntity) -> bool: return self.title < other.title