mirror of https://github.com/astral-sh/uv
Improve `CPythonFinder._parse_download_url` a bit (#14780)
## Summary Rename `_parse_download_url` to `_parse_download_asset` and move the `asset['digest']` logic into it. ## Test Plan ```console uv run ./crates/uv-python/fetch-download-metadata.py ```
This commit is contained in:
parent
7c2819d1f6
commit
98d6ab6632
|
|
@ -53,8 +53,7 @@ import re
|
||||||
from dataclasses import asdict, dataclass, field
|
from dataclasses import asdict, dataclass, field
|
||||||
from enum import StrEnum
|
from enum import StrEnum
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Generator, Iterable, NamedTuple, Self
|
from typing import Any, Generator, Iterable, NamedTuple, Self
|
||||||
from urllib.parse import unquote
|
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
|
|
@ -255,13 +254,7 @@ class CPythonFinder(Finder):
|
||||||
# Sort the assets to ensure deterministic results
|
# Sort the assets to ensure deterministic results
|
||||||
row["assets"].sort(key=lambda asset: asset["browser_download_url"])
|
row["assets"].sort(key=lambda asset: asset["browser_download_url"])
|
||||||
for asset in row["assets"]:
|
for asset in row["assets"]:
|
||||||
# On older versions, GitHub didn't backfill the digest.
|
download = self._parse_download_asset(asset)
|
||||||
if digest := asset["digest"]:
|
|
||||||
sha256 = digest.removeprefix("sha256:")
|
|
||||||
else:
|
|
||||||
sha256 = None
|
|
||||||
url = asset["browser_download_url"]
|
|
||||||
download = self._parse_download_url(url, sha256)
|
|
||||||
if download is None:
|
if download is None:
|
||||||
continue
|
continue
|
||||||
if (
|
if (
|
||||||
|
|
@ -355,16 +348,19 @@ class CPythonFinder(Finder):
|
||||||
continue
|
continue
|
||||||
download.sha256 = checksums.get(download.filename)
|
download.sha256 = checksums.get(download.filename)
|
||||||
|
|
||||||
def _parse_download_url(
|
def _parse_download_asset(self, asset: dict[str, Any]) -> PythonDownload | None:
|
||||||
self, url: str, sha256: str | None
|
"""Parse a python-build-standalone download asset into a PythonDownload object."""
|
||||||
) -> PythonDownload | None:
|
url = asset["browser_download_url"]
|
||||||
"""Parse an indygreg download URL into a PythonDownload object."""
|
|
||||||
# Ex)
|
# Ex)
|
||||||
# https://github.com/astral-sh/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-aarch64-unknown-linux-gnu-lto-full.tar.zst
|
# https://github.com/astral-sh/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-aarch64-unknown-linux-gnu-lto-full.tar.zst
|
||||||
if url.endswith(".sha256"):
|
if url.endswith(".sha256"):
|
||||||
return None
|
return None
|
||||||
filename = unquote(url.rsplit("/", maxsplit=1)[-1])
|
|
||||||
release = int(url.rsplit("/")[-2])
|
release = int(url.rsplit("/")[-2])
|
||||||
|
filename = asset["name"]
|
||||||
|
sha256 = None
|
||||||
|
# On older versions, GitHub didn't backfill the digest.
|
||||||
|
if digest := asset["digest"]:
|
||||||
|
sha256 = digest.removeprefix("sha256:")
|
||||||
|
|
||||||
match = self._filename_re.match(filename) or self._legacy_filename_re.match(
|
match = self._filename_re.match(filename) or self._legacy_filename_re.match(
|
||||||
filename
|
filename
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue