fix item sync pagination limit

This commit is contained in:
GuDong
2026-08-14 19:48:23 +08:00
parent dc6e4b7e37
commit 9739cc5c94
4 changed files with 50 additions and 2 deletions
+7
View File
@@ -38,6 +38,7 @@ from utils.notification_dispatcher import (
guess_verification_type,
render_notification_template,
)
from utils.item_pagination import normalize_item_list_page_size
MANUAL_VERIFICATION_CONTEXTS = {
@@ -17779,6 +17780,11 @@ class XianyuLive:
logger.error("获取商品信息失败,重试次数过多")
return {"error": "获取商品信息失败,重试次数过多"}
requested_page_size = page_size
page_size = normalize_item_list_page_size(page_size)
if str(requested_page_size) != str(page_size):
logger.warning(f"商品列表每页数量已限制为 {page_size}: requested={requested_page_size}")
# 确保session已创建
if not self.session:
await self.create_session()
@@ -17945,6 +17951,7 @@ class XianyuLive:
Returns:
dict: 包含所有商品信息的字典
"""
page_size = normalize_item_list_page_size(page_size)
all_items = []
page_number = 1
total_saved = 0
+3 -2
View File
@@ -35,6 +35,7 @@ from utils.qr_login import qr_login_manager
from utils.qr_login_lite import qrcode_login_lite
from utils.xianyu_utils import trans_cookies
from utils.image_utils import image_manager
from utils.item_pagination import MAX_ITEM_LIST_PAGE_SIZE
from utils.product_sku import ProductSkuValidationError, normalize_sku_config
from utils.time_utils import (
LOCAL_TIMEZONE,
@@ -10261,7 +10262,7 @@ async def _sync_items_after_publish(
try:
page_sync_result = await xianyu_instance.get_item_list_info(
page_number=1,
page_size=100,
page_size=MAX_ITEM_LIST_PAGE_SIZE,
sync_item_details=True,
)
@@ -10270,7 +10271,7 @@ async def _sync_items_after_publish(
if published_item_id and not item_synced:
fallback_result = await xianyu_instance.get_all_items(
page_size=100,
page_size=MAX_ITEM_LIST_PAGE_SIZE,
max_pages=3,
sync_item_details=True,
)
+25
View File
@@ -0,0 +1,25 @@
import unittest
from utils.item_pagination import (
DEFAULT_ITEM_LIST_PAGE_SIZE,
MAX_ITEM_LIST_PAGE_SIZE,
normalize_item_list_page_size,
)
class ItemPaginationTests(unittest.TestCase):
def test_keeps_supported_page_size(self):
self.assertEqual(normalize_item_list_page_size(10), 10)
self.assertEqual(normalize_item_list_page_size("20"), 20)
def test_caps_page_size_at_goofish_limit(self):
self.assertEqual(MAX_ITEM_LIST_PAGE_SIZE, 20)
self.assertEqual(normalize_item_list_page_size(100), 20)
def test_normalizes_invalid_page_size(self):
self.assertEqual(normalize_item_list_page_size(0), 1)
self.assertEqual(normalize_item_list_page_size("invalid"), DEFAULT_ITEM_LIST_PAGE_SIZE)
if __name__ == "__main__":
unittest.main()
+15
View File
@@ -0,0 +1,15 @@
from typing import Any
DEFAULT_ITEM_LIST_PAGE_SIZE = 20
MAX_ITEM_LIST_PAGE_SIZE = 20
def normalize_item_list_page_size(value: Any) -> int:
"""将商品列表分页大小限制在闲鱼网页端接口允许的范围内。"""
try:
page_size = int(value)
except (TypeError, ValueError):
page_size = DEFAULT_ITEM_LIST_PAGE_SIZE
return min(max(page_size, 1), MAX_ITEM_LIST_PAGE_SIZE)