Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/scrapebadger/ebay/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ class Pagination(_BaseModel):
per_page: int | None = None
total_pages: int | None = None
total_results: int | None = None
#: True while eBay still offers a next page. This is the stop signal for
#: bulk extraction: ``total_pages``/``total_results`` are ``None`` on the
#: completed/sold grid, and past the last page eBay re-serves that page, so
#: looping "until empty" alone never terminates.
has_more: bool | None = None


class MarketInfo(_BaseModel):
Expand Down Expand Up @@ -127,7 +132,10 @@ class SearchResult(_BaseModel):
seller_feedback_percent: float | None = None
seller_feedback_score: int | None = None
program_badge: str | None = None # e.g. "eBay Refurbished"
is_sponsored: bool = False
#: Always ``None`` — eBay renders its "Sponsored" badge into every card
#: as anti-scraping bait, so promoted placements cannot be distinguished
#: from organic results.
is_sponsored: bool | None = None


# =============================================================================
Expand Down
4 changes: 3 additions & 1 deletion tests/test_ebay.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,9 @@ def test_search_result_minimal(self) -> None:
result = SearchResult(position=1, item_id="X")
assert result.title is None
assert result.is_auction is False
assert result.is_sponsored is False
# None, not False: eBay's "Sponsored" badge is present on every card, so
# sponsorship is unknowable from the response rather than known-absent.
assert result.is_sponsored is None
assert result.price is None

def test_item_full(self) -> None:
Expand Down
Loading