nixGL/fetch: single-thread beats future

std
Hung 2023-04-02 11:49:46 -07:00
parent 17937c2146
commit 1f511b052c
2 changed files with 18 additions and 4 deletions

View File

@ -1,9 +1,14 @@
#!/usr/bin/env python3
# execution: fetch.py >nvidia_versions.json
import http.client import http.client
import json import json
import sys import sys
NV_FREE_X86_URL = "download.nvidia.com" NV_FREE_X86_URL = "download.nvidia.com"
POTENTIAL_SHA256_EXTS = [".sha256sum", ".sha256"] POTENTIAL_SHA256_EXTS = [".sha256sum", ".sha256"]
RIGHT_PAD = " " * 20
conn = http.client.HTTPSConnection(NV_FREE_X86_URL) conn = http.client.HTTPSConnection(NV_FREE_X86_URL)
conn.request("GET", "/XFree86/Linux-x86_64/") conn.request("GET", "/XFree86/Linux-x86_64/")
response = conn.getresponse() response = conn.getresponse()
@ -32,9 +37,8 @@ def scrape_driver_versions(dir_html: bytes):
versions = _rec(dir_html, 0, []) versions = _rec(dir_html, 0, [])
num_versions = len(versions) num_versions = len(versions)
right_pad = " " * 50
for i, version in enumerate(versions): for i, version in enumerate(versions):
print(f"[{i+1}/{num_versions}] Processing version {version}{right_pad}", end="\r", file=sys.stderr) print(f"[{i+1}/{num_versions}] Processing version {version}{RIGHT_PAD}", end="\r", file=sys.stderr)
yield version yield version
print() print()
@ -48,15 +52,24 @@ sha256_urls_of = lambda ver: [
] ]
def sha256_of(version: str) -> str | None: def sha256_of(version: str) -> str | None:
if int(version.split(".")[0]) < 256:
# Has 3 different packages that we should probably not bother
return None
for url in sha256_urls_of(version): for url in sha256_urls_of(version):
conn = http.client.HTTPSConnection(NV_FREE_X86_URL) conn = http.client.HTTPSConnection(NV_FREE_X86_URL)
conn.request("GET", url) conn.request("GET", url)
response = conn.getresponse() response = conn.getresponse()
if response.status < 400: if response.status < 400:
return response.read().decode().split()[0] return response.read().decode().split()[0]
print(f"No sha256 for {version}{RIGHT_PAD}", file=sys.stderr)
return None return None
fetch_data = [(v, download_urls_of(v)[0], sha256_of(v)) for v in versions] def fetch(version: str):
dl_url = download_urls_of(version)[0]
sha256 = sha256_of(version)
return (version, dl_url, sha256)
fetch_data = [fetch(v) for v in versions]
fetch_data.append(("latest", *fetch_data[-1][1:])) fetch_data.append(("latest", *fetch_data[-1][1:]))
# now print the JSON object # now print the JSON object
@ -65,4 +78,4 @@ print(json.dumps({
"url": f"https://{NV_FREE_X86_URL}{dl_url}", "url": f"https://{NV_FREE_X86_URL}{dl_url}",
"sha256": sha256 "sha256": sha256
} for (version, dl_url, sha256) in fetch_data if sha256 is not None}, indent=4)) } for (version, dl_url, sha256) in fetch_data if sha256 is not None}, indent=4))
# execution: fetch.py >nvidia_versions.json

View File

@ -1,3 +1,4 @@
{ {
"256.25": { "256.25": {
"url": "https://download.nvidia.com/XFree86/Linux-x86_64/256.25/NVIDIA-Linux-x86_64-256.25.run", "url": "https://download.nvidia.com/XFree86/Linux-x86_64/256.25/NVIDIA-Linux-x86_64-256.25.run",