Skip to content

Commit 8c9eb34

Browse files
Add retry support and exception tolerance for url parser (#7734)
1 parent 71abc48 commit 8c9eb34

3 files changed

Lines changed: 53 additions & 11 deletions

File tree

ci_scripts/hooks/pre-doc-compile.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ download_file "${ATTRIBUTE_MAPPING_URL}" "${TOOLS_DIR}/attribute_mapping.json"
9696

9797
echo "INFO: All API mapping files successfully downloaded"
9898

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

101101
# Run the remaining scripts with failure handling
102102
echo "INFO: Running get_api_difference_info.py"

docs/guides/model_convert/convert_from_pytorch/tools/utils/api_url_parser.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,48 @@
11
from __future__ import annotations
22

3+
import time
34
from abc import ABC, abstractmethod
5+
from logging import getLogger
46
from pathlib import Path
57
from urllib.parse import urljoin
68

7-
from loguru import logger
8-
from sphobjinv.inventory import Inventory
9+
from sphobjinv.inventory import Inventory as BaseInventory
10+
11+
logger = getLogger(__name__)
12+
13+
14+
class Inventory(BaseInventory):
15+
MAX_RETRIES = 3
16+
RETRY_DELAY = 1.0 # seconds
17+
18+
def __init__(self, *args, **kwargs) -> None:
19+
logger.info(f"Creating {self.__class__.__name__}")
20+
21+
# 网络重试逻辑
22+
last_exception = None
23+
for attempt in range(1, self.MAX_RETRIES + 1):
24+
try:
25+
super().__init__(*args, **kwargs)
26+
logger.info(f"Created {self.__class__.__name__}")
27+
return
28+
except Exception as e:
29+
last_exception = e
30+
if attempt < self.MAX_RETRIES:
31+
logger.warning(
32+
f"Network request failed (attempt {attempt}/{self.MAX_RETRIES}): {e}. "
33+
f"Retrying in {self.RETRY_DELAY} seconds..."
34+
)
35+
time.sleep(self.RETRY_DELAY)
36+
else:
37+
logger.error(
38+
f"Network request failed after {self.MAX_RETRIES} attempts: {e}"
39+
)
40+
41+
# 如果所有重试都失败,抛出网络异常
42+
raise ConnectionError(
43+
f"Failed to create Inventory after {self.MAX_RETRIES} attempts. "
44+
f"Last error: {last_exception}"
45+
) from last_exception
946

1047

1148
class ApiUrlParserBase(ABC):

docs/guides/model_convert/convert_from_pytorch/tools/utils/api_utils.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,27 @@
44
import os
55
import re
66
from collections import defaultdict
7+
from logging import getLogger
78
from pathlib import Path
89

9-
from loguru import logger
10-
1110
from .api_url_parser import get_parser
1211

12+
logger = getLogger(__name__)
13+
1314

1415
def get_url(
1516
api_name: str, package: str | None = None, disable_warning: bool = False
1617
) -> str:
17-
api_name = api_name.replace(r"\_", "_")
18-
if package is None:
19-
package = api_name.split(".")[0]
20-
url = get_parser(package).get_api_url(api_name) or ""
21-
if url == "" and not disable_warning:
22-
logger.warning("Missing api {} in package {}", api_name, package)
18+
try:
19+
api_name = api_name.replace(r"\_", "_")
20+
if package is None:
21+
package = api_name.split(".")[0]
22+
url = get_parser(package).get_api_url(api_name) or ""
23+
if url == "" and not disable_warning:
24+
logger.warning("Missing api %s in package %s", api_name, package)
25+
except Exception as e:
26+
logger.error("get api %s in package %s error: %s", api_name, package, e)
27+
return ""
2328
return url
2429

2530

0 commit comments

Comments
 (0)