mirror of
https://github.com/GuDong2003/xianyu-auto-reply-fix.git
synced 2026-08-28 17:40:45 +08:00
fix item sync pagination limit
This commit is contained in:
@@ -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
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user