nixGL/fetch: single-thread beats future
parent
17937c2146
commit
1f511b052c
|
@ -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
|
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in New Issue