mirror of
https://github.com/keylase/nvidia-patch.git
synced 2024-08-30 18:32:50 +00:00
ndl: track Vulkan Beta Drivers
This commit is contained in:
parent
ec7bec5c2e
commit
31b850f27c
@ -23,6 +23,7 @@ All scripts may be used both as standalone application and importable module. Fo
|
|||||||
* mailer.py - module with email routines and minimalistic email client for test purposes.
|
* mailer.py - module with email routines and minimalistic email client for test purposes.
|
||||||
* gfe\_get\_driver.py - GeForce Experience client library (and test util).
|
* gfe\_get\_driver.py - GeForce Experience client library (and test util).
|
||||||
* get\_nvidia\_downloads.py - Nvidia downloads site parser (and test util).
|
* get\_nvidia\_downloads.py - Nvidia downloads site parser (and test util).
|
||||||
|
* get\_vulkan\_downloads.py - Nvidia Developer downloads site parser (and test util). Used for Vulkan Beta Drivers.
|
||||||
|
|
||||||
### Operation
|
### Operation
|
||||||
|
|
||||||
@ -214,6 +215,20 @@ All scripts may be used both as standalone application and importable module. Fo
|
|||||||
"type": "cuda_downloads",
|
"type": "cuda_downloads",
|
||||||
"name": "cuda toolkit tracker",
|
"name": "cuda toolkit tracker",
|
||||||
"params": {}
|
"params": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "vulkan_beta",
|
||||||
|
"name": "vulkan beta windows",
|
||||||
|
"params": {
|
||||||
|
"os": "Windows"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "vulkan_beta",
|
||||||
|
"name": "vulkan beta linux",
|
||||||
|
"params": {
|
||||||
|
"os": "Linux"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"notifiers": [
|
"notifiers": [
|
||||||
@ -306,6 +321,17 @@ Params:
|
|||||||
|
|
||||||
* `timeout` - allowed delay in seconds for each network operation. Default: `10.0`
|
* `timeout` - allowed delay in seconds for each network operation. Default: `10.0`
|
||||||
|
|
||||||
|
#### VulkanBetaDownloadsChannel
|
||||||
|
|
||||||
|
Parses Nvidia Developer downloads site for latest Vulkan Beta Drivers.
|
||||||
|
|
||||||
|
Type: `vulkan_beta`
|
||||||
|
|
||||||
|
Params:
|
||||||
|
|
||||||
|
* `os` - OS family. Allowed values: `Linux`, `Windows`. Default: `Linux`.
|
||||||
|
* `timeout` - allowed delay in seconds for each network operation. Default: `10.0`
|
||||||
|
|
||||||
### Notifiers
|
### Notifiers
|
||||||
|
|
||||||
#### CommandNotifier
|
#### CommandNotifier
|
||||||
|
84
tools/nv-driver-locator/get_vulkan_downloads.py
Executable file
84
tools/nv-driver-locator/get_vulkan_downloads.py
Executable file
@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import urllib.request
|
||||||
|
import urllib.error
|
||||||
|
import urllib.parse
|
||||||
|
import codecs
|
||||||
|
import enum
|
||||||
|
import re
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
|
USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:65.0) '\
|
||||||
|
'Gecko/20100101 Firefox/65.0'
|
||||||
|
URL = 'https://developer.nvidia.com/vulkan-driver'
|
||||||
|
|
||||||
|
def parse_args():
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
def check_positive_float(val):
|
||||||
|
val = float(val)
|
||||||
|
if val <= 0:
|
||||||
|
raise ValueError("Value %s is not valid positive float" %
|
||||||
|
(repr(val),))
|
||||||
|
return val
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Retrieves info about latest NVIDIA Vulkan beta drivers "
|
||||||
|
"from developer downloads site",
|
||||||
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
||||||
|
parser.add_argument("-T", "--timeout",
|
||||||
|
type=check_positive_float,
|
||||||
|
default=10.,
|
||||||
|
help="timeout for network operations")
|
||||||
|
args = parser.parse_args()
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_url(url, timeout=10):
|
||||||
|
http_req = urllib.request.Request(
|
||||||
|
url,
|
||||||
|
data=None,
|
||||||
|
headers={
|
||||||
|
'User-Agent': USER_AGENT
|
||||||
|
}
|
||||||
|
)
|
||||||
|
with urllib.request.urlopen(http_req, None, timeout) as resp:
|
||||||
|
coding = resp.headers.get_content_charset()
|
||||||
|
coding = coding if coding is not None else 'utf-8-sig'
|
||||||
|
decoder = codecs.getreader(coding)(resp)
|
||||||
|
res = decoder.read()
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def get_drivers(*, timeout=10):
|
||||||
|
body = fetch_url(URL)
|
||||||
|
soup = BeautifulSoup(body, 'html.parser')
|
||||||
|
result = []
|
||||||
|
for sibling in soup.find('h4',
|
||||||
|
string=re.compile(r'Vulkan .* Developer Beta Driver Downloads', re.I)
|
||||||
|
).next_siblings:
|
||||||
|
if sibling.name == 'h4':
|
||||||
|
break
|
||||||
|
if sibling.name == 'p' and sibling.b is not None:
|
||||||
|
m = re.match(r'(Windows|Linux)\s+((\d+\.){1,2}\d+)', sibling.b.string)
|
||||||
|
if m is not None:
|
||||||
|
ver = m.group(2)
|
||||||
|
os = m.group(1)
|
||||||
|
obj = {
|
||||||
|
"name": "Vulkan Beta Driver for %s" % (os,),
|
||||||
|
"os": os,
|
||||||
|
"version": ver,
|
||||||
|
}
|
||||||
|
result.append(obj)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import pprint
|
||||||
|
args = parse_args()
|
||||||
|
pprint.pprint(get_drivers(timeout=args.timeout))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
@ -238,6 +238,20 @@
|
|||||||
"type": "cuda_downloads",
|
"type": "cuda_downloads",
|
||||||
"name": "cuda toolkit tracker",
|
"name": "cuda toolkit tracker",
|
||||||
"params": {}
|
"params": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "vulkan_beta",
|
||||||
|
"name": "vulkan beta windows",
|
||||||
|
"params": {
|
||||||
|
"os": "Windows"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "vulkan_beta",
|
||||||
|
"name": "vulkan beta linux",
|
||||||
|
"params": {
|
||||||
|
"os": "Linux"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"notifiers": [
|
"notifiers": [
|
||||||
|
@ -7,6 +7,7 @@ import hashlib
|
|||||||
import importlib
|
import importlib
|
||||||
import logging
|
import logging
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
import functools
|
||||||
|
|
||||||
|
|
||||||
HASH_DELIM = b'\x00'
|
HASH_DELIM = b'\x00'
|
||||||
@ -275,6 +276,33 @@ class CudaToolkitDownloadsChannel(BaseChannel):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@functools.lru_cache(maxsize=0)
|
||||||
|
def vulkan_downloads(*, timeout=10):
|
||||||
|
gvd = importlib.import_module('get_vulkan_downloads')
|
||||||
|
return gvd.get_drivers(timeout=timeout)
|
||||||
|
|
||||||
|
class VulkanBetaDownloadsChannel(BaseChannel):
|
||||||
|
def __init__(self, name, *,
|
||||||
|
os="Linux",
|
||||||
|
timeout=10):
|
||||||
|
self.name = name
|
||||||
|
self._os = os
|
||||||
|
self._timeout = timeout
|
||||||
|
|
||||||
|
def get_latest_driver(self):
|
||||||
|
drivers = vulkan_downloads(timeout=self._timeout)
|
||||||
|
for drv in drivers:
|
||||||
|
if drv["os"] == self._os:
|
||||||
|
return {
|
||||||
|
'DriverAttributes': {
|
||||||
|
'Version': drv['version'],
|
||||||
|
'Name': drv['name'],
|
||||||
|
'NameLocalized': drv['name'],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
@ -303,6 +331,7 @@ class DriverLocator:
|
|||||||
'gfe_client': GFEClientChannel,
|
'gfe_client': GFEClientChannel,
|
||||||
'nvidia_downloads': NvidiaDownloadsChannel,
|
'nvidia_downloads': NvidiaDownloadsChannel,
|
||||||
'cuda_downloads': CudaToolkitDownloadsChannel,
|
'cuda_downloads': CudaToolkitDownloadsChannel,
|
||||||
|
'vulkan_beta': VulkanBetaDownloadsChannel,
|
||||||
}
|
}
|
||||||
|
|
||||||
channels = []
|
channels = []
|
||||||
|
Loading…
Reference in New Issue
Block a user