diff --git a/ci_scripts/hooks/pre-doc-compile.sh b/ci_scripts/hooks/pre-doc-compile.sh index a197a20c336..2e2898188ed 100755 --- a/ci_scripts/hooks/pre-doc-compile.sh +++ b/ci_scripts/hooks/pre-doc-compile.sh @@ -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" diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/utils/api_url_parser.py b/docs/guides/model_convert/convert_from_pytorch/tools/utils/api_url_parser.py index b67af501616..cd2115dde58 100644 --- a/docs/guides/model_convert/convert_from_pytorch/tools/utils/api_url_parser.py +++ b/docs/guides/model_convert/convert_from_pytorch/tools/utils/api_url_parser.py @@ -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): + 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): diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/utils/api_utils.py b/docs/guides/model_convert/convert_from_pytorch/tools/utils/api_utils.py index 1c88cf95f2b..65da0d3a5bc 100644 --- a/docs/guides/model_convert/convert_from_pytorch/tools/utils/api_utils.py +++ b/docs/guides/model_convert/convert_from_pytorch/tools/utils/api_utils.py @@ -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