Skip to content

Commit 13e6128

Browse files
committed
refactor: simplify updater target resolvers and nightly error checks
1 parent ef0e13f commit 13e6128

1 file changed

Lines changed: 19 additions & 20 deletions

File tree

astrbot/core/updator.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -158,22 +158,21 @@ def _is_expected_nightly_fetch_error(exc: BaseException) -> bool:
158158
aiohttp.ClientError,
159159
JSONDecodeError,
160160
)
161-
to_check = [exc]
162-
checked: set[int] = set()
163-
while to_check:
164-
current = to_check.pop()
165-
if id(current) in checked:
166-
continue
167-
checked.add(id(current))
168-
if isinstance(current, expected_types):
161+
162+
def _matches(error: BaseException | None) -> bool:
163+
if error is None:
164+
return False
165+
if isinstance(error, expected_types):
169166
return True
170-
if str(current).startswith("请求失败,状态码:"):
167+
if str(error).startswith("请求失败,状态码:"):
171168
return True
172-
if current.__cause__:
173-
to_check.append(current.__cause__)
174-
if current.__context__:
175-
to_check.append(current.__context__)
176-
return False
169+
return False
170+
171+
return (
172+
_matches(exc)
173+
or _matches(getattr(exc, "__cause__", None))
174+
or _matches(getattr(exc, "__context__", None))
175+
)
177176

178177
async def get_nightly_release(self) -> dict | None:
179178
nightly_release_url = f"{self.GITHUB_RELEASE_API}/tags/{self.NIGHTLY_TAG}"
@@ -205,7 +204,7 @@ async def get_releases_with_nightly(self, latest: bool = True) -> list:
205204
releases.insert(0, nightly_release)
206205
return releases
207206

208-
async def _resolve_latest(self, releases: list) -> tuple[str, str]:
207+
def _resolve_latest(self, releases: list) -> tuple[str, str]:
209208
latest_release = next(
210209
(
211210
item
@@ -222,12 +221,12 @@ async def _resolve_latest(self, releases: list) -> tuple[str, str]:
222221
raise Exception("当前已经是最新版本。")
223222
return latest_version, latest_release["zipball_url"]
224223

225-
async def _resolve_nightly(self) -> tuple[str, str]:
224+
def _resolve_nightly(self) -> tuple[str, str]:
226225
return self.NIGHTLY_TAG, (
227226
f"https://github.com/AstrBotDevs/AstrBot/archive/refs/tags/{self.NIGHTLY_TAG}.zip"
228227
)
229228

230-
async def _resolve_tag(self, releases: list, version_str: str) -> tuple[str, str]:
229+
def _resolve_tag(self, releases: list, version_str: str) -> tuple[str, str]:
231230
for data in releases:
232231
if data["tag_name"] == version_str:
233232
return version_str, data["zipball_url"]
@@ -250,12 +249,12 @@ async def update(self, reboot=False, latest=True, version=None, proxy="") -> Non
250249
version_str = str(version) if version is not None else ""
251250
if latest:
252251
releases = await self.get_releases(latest=True)
253-
target_version, file_url = await self._resolve_latest(releases)
252+
target_version, file_url = self._resolve_latest(releases)
254253
elif version_str.lower() == self.NIGHTLY_TAG:
255-
target_version, file_url = await self._resolve_nightly()
254+
target_version, file_url = self._resolve_nightly()
256255
elif version_str.startswith("v"):
257256
releases = await self.get_releases(latest=False)
258-
target_version, file_url = await self._resolve_tag(releases, version_str)
257+
target_version, file_url = self._resolve_tag(releases, version_str)
259258
else:
260259
target_version, file_url = self._resolve_commit(version_str)
261260

0 commit comments

Comments
 (0)