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
2 changes: 1 addition & 1 deletion ci_scripts/hooks/pre-doc-compile.sh
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ download_file "${ATTRIBUTE_MAPPING_URL}" "${TOOLS_DIR}/attribute_mapping.json"

echo "INFO: All API mapping files successfully downloaded"

python -m pip install loguru sphobjinv -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m pip install sphobjinv -i https://pypi.tuna.tsinghua.edu.cn/simple

# Run the remaining scripts with failure handling
echo "INFO: Running get_api_difference_info.py"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,48 @@
from __future__ import annotations

import time
from abc import ABC, abstractmethod
from logging import getLogger
from pathlib import Path
from urllib.parse import urljoin

from loguru import logger
from sphobjinv.inventory import Inventory
from sphobjinv.inventory import Inventory as BaseInventory

logger = getLogger(__name__)


class Inventory(BaseInventory):
Copy link

Copilot AI Feb 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里新定义的 Inventory 类会遮蔽 sphobjinv.inventory.Inventory 的原始含义,后续读代码/排查问题时容易混淆(尤其在 traceback/类型提示中)。建议把该包装类改成更明确的名字(例如 LoggedInventory/DebugInventory),并在本文件内相应替换调用点;或仅在需要时用局部函数/上下文包装而不是同名类覆盖。

Suggested change
class Inventory(BaseInventory):
class LoggedInventory(BaseInventory):

Copilot uses AI. Check for mistakes.
MAX_RETRIES = 3
RETRY_DELAY = 1.0 # seconds

def __init__(self, *args, **kwargs) -> None:
logger.info(f"Creating {self.__class__.__name__}")

# 网络重试逻辑
last_exception = None
for attempt in range(1, self.MAX_RETRIES + 1):
try:
super().__init__(*args, **kwargs)
logger.info(f"Created {self.__class__.__name__}")
return
except Exception as e:
last_exception = e
if attempt < self.MAX_RETRIES:
logger.warning(
f"Network request failed (attempt {attempt}/{self.MAX_RETRIES}): {e}. "
f"Retrying in {self.RETRY_DELAY} seconds..."
)
time.sleep(self.RETRY_DELAY)
else:
logger.error(
f"Network request failed after {self.MAX_RETRIES} attempts: {e}"
)

# 如果所有重试都失败,抛出网络异常
raise ConnectionError(
f"Failed to create Inventory after {self.MAX_RETRIES} attempts. "
f"Last error: {last_exception}"
) from last_exception


class ApiUrlParserBase(ABC):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,27 @@
import os
import re
from collections import defaultdict
from logging import getLogger
from pathlib import Path

from loguru import logger

from .api_url_parser import get_parser

logger = getLogger(__name__)


def get_url(
api_name: str, package: str | None = None, disable_warning: bool = False
) -> str:
api_name = api_name.replace(r"\_", "_")
if package is None:
package = api_name.split(".")[0]
url = get_parser(package).get_api_url(api_name) or ""
if url == "" and not disable_warning:
logger.warning("Missing api {} in package {}", api_name, package)
try:
api_name = api_name.replace(r"\_", "_")
if package is None:
package = api_name.split(".")[0]
url = get_parser(package).get_api_url(api_name) or ""
if url == "" and not disable_warning:
logger.warning("Missing api %s in package %s", api_name, package)
except Exception as e:
logger.error("get api %s in package %s error: %s", api_name, package, e)
return ""
return url


Expand Down