Files
endoflife-date-release-data/src/firefox.py
Marc Wrobel 7cf62c2355 Refactor HTTP common code (#207)
- move to common/http.py,
- make fetch_url return a Response.
2023-12-02 22:52:12 +01:00

43 lines
1.4 KiB
Python

import re
import urllib.parse
from bs4 import BeautifulSoup
from common import http
from common import dates
from common import endoflife
"""Fetch Firefox versions with their dates from https://www.mozilla.org/"""
URL = "https://www.mozilla.org/en-US/firefox/releases/"
PRODUCT = "firefox"
def format_date(text: str) -> str:
text = text.replace(')', '')
return dates.parse_date(text).strftime("%Y-%m-%d")
print(f"::group::{PRODUCT}")
versions = {}
response = http.fetch_url(URL)
ff_releases = BeautifulSoup(response.text, features="html5lib").find_all("ol", class_="c-release-list")
urls = [urllib.parse.urljoin(URL, p.get("href")) for p in ff_releases[0].find_all("a")]
for response in http.fetch_urls(urls):
soup = BeautifulSoup(response.text, features="html5lib")
version = response.request.url.split("/")[-3]
if soup.find("div", class_="c-release-version"):
date = format_date(soup.find("p", class_="c-release-date").get_text())
versions[version] = date
print(f"{version}: {date}")
elif soup.find("small", string=re.compile("^.?First offered")):
element = soup.find("small", string=re.compile("^.?First offered"))
date = format_date(' '.join(element.get_text().split(" ")[-3:])) # get last 3 words
versions[version] = date
print(f"{version}: {date}")
# we don't get version <= 10.0, not a big deal
endoflife.write_releases(PRODUCT, versions)
print("::endgroup::")