@@ -62,7 +62,7 @@ def fetch_html(url: str, data: any = None, user_agent: str = ENDOFLIFE_BOT_USER_
|
|||||||
return BeautifulSoup(response.text, features=features)
|
return BeautifulSoup(response.text, features=features)
|
||||||
|
|
||||||
def fetch_json(url: str, data: any = None, user_agent: str = ENDOFLIFE_BOT_USER_AGENT,
|
def fetch_json(url: str, data: any = None, user_agent: str = ENDOFLIFE_BOT_USER_AGENT,
|
||||||
max_retries: int = 10, backoff_factor: float = 0.5, timeout: int = 30) -> Document:
|
max_retries: int = 10, backoff_factor: float = 0.5, timeout: int = 30) -> dict:
|
||||||
response = fetch_url(url, data, user_agent, max_retries, backoff_factor, timeout)
|
response = fetch_url(url, data, user_agent, max_retries, backoff_factor, timeout)
|
||||||
return response.json()
|
return response.json()
|
||||||
|
|
||||||
|
|||||||
44
src/nvidia-releases.py
Normal file
44
src/nvidia-releases.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
import logging
|
||||||
|
import re
|
||||||
|
|
||||||
|
from common import http
|
||||||
|
from common.releasedata import ProductData, config_from_argv
|
||||||
|
|
||||||
|
WINDOWS_VERSION_REGEX = re.compile(r'Version .+\(Linux\)/(?P<version>.+)\(Windows\)')
|
||||||
|
|
||||||
|
config = config_from_argv()
|
||||||
|
with ProductData(config.product) as product_data:
|
||||||
|
data = http.fetch_json(config.url)
|
||||||
|
for release_name in data:
|
||||||
|
release_data = data[release_name]
|
||||||
|
latest_version_data = release_data.get('driver_info')[0]
|
||||||
|
latest = latest_version_data['release_version']
|
||||||
|
latest_release_data = latest_version_data['release_date']
|
||||||
|
link = latest_version_data['release_notes']
|
||||||
|
|
||||||
|
# Only linux releases are documented in the JSON document.
|
||||||
|
release = product_data.get_release(f"r{release_name}-linux")
|
||||||
|
release.set_field('latest', latest)
|
||||||
|
release.set_field('latestReleaseDate', latest_release_data)
|
||||||
|
release.set_field('link', link)
|
||||||
|
|
||||||
|
# Windows releases are documented in the release notes.
|
||||||
|
if not link.startswith('https://docs.nvidia.com'):
|
||||||
|
logging.debug("Skipping windows release %s, link %s does not start with https://docs.nvidia.com", release_name, link)
|
||||||
|
continue
|
||||||
|
|
||||||
|
release_note_html = http.fetch_html(link)
|
||||||
|
release_note_title = release_note_html.select_one('h2.title.topictitle1')
|
||||||
|
if not release_note_title:
|
||||||
|
logging.warning("Skipping windows release %s, could not find release note title in '%s'", release_name, link)
|
||||||
|
continue
|
||||||
|
|
||||||
|
windows_version_match = WINDOWS_VERSION_REGEX.search(release_note_title.text)
|
||||||
|
if not windows_version_match:
|
||||||
|
logging.warning("Skipping windows release %s, could not find version in release note title '%s'", release_name, release_note_title.text)
|
||||||
|
continue
|
||||||
|
|
||||||
|
release = product_data.get_release(f"r{release_name}-windows")
|
||||||
|
release.set_field('latest', windows_version_match.group('version'))
|
||||||
|
release.set_field('latestReleaseDate', latest_release_data)
|
||||||
|
release.set_field('link', link)
|
||||||
Reference in New Issue
Block a user