From fa1eab8d21763f7158f05074abf45a6fbc9731c3 Mon Sep 17 00:00:00 2001 From: Marc Wrobel Date: Sun, 13 Jul 2025 12:47:33 +0200 Subject: [PATCH] [apple] Add 2020-2021 and 2022-2023 security update pages (#467) --- src/apple.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/apple.py b/src/apple.py index 76c97aa7..fabb46fa 100644 --- a/src/apple.py +++ b/src/apple.py @@ -8,7 +8,9 @@ from common.releasedata import ProductData, config_from_argv """Fetches and parses version and release date information from Apple's support website.""" URLS = [ - "https://support.apple.com/en-us/HT201222", # latest + "https://support.apple.com/kb/HT201222", # latest + "https://support.apple.com/en-us/121012", # 2022-2023 + "https://support.apple.com/en-us/120989", # 2020-2021 "https://support.apple.com/kb/HT213078", # 2018-2019 "https://support.apple.com/kb/HT213077", # 2016-2017 "https://support.apple.com/kb/HT209441", # 2015 @@ -25,17 +27,21 @@ DATE_PATTERN = re.compile(r"\b\d+\s[A-Za-z]+\s\d+\b") config = config_from_argv() with ProductData(config.product) as product_data: - # URLs are cached to avoid rate limiting by support.apple.com. - soups = [BeautifulSoup(response.text, features="html5lib") for response in http.fetch_urls(URLS)] + responses = http.fetch_urls(URLS) - for soup in soups: - versions_table = soup.find(id="tableWraper") - versions_table = versions_table if versions_table else soup.find('table', class_="gb-table") + for response in responses: + soup = BeautifulSoup(response.text, "html5lib") + versions_table = soup.select_one("#tableWraper") + versions_table = versions_table if versions_table else soup.select_one("table.gb-table") - for row in versions_table.findAll("tr")[1:]: - cells = row.findAll("td") - version_text = cells[0].get_text().strip() - date_text = cells[2].get_text().strip() + if not versions_table: + message = f"no versions table found in {response.url}" + raise ValueError(message) + + for row in versions_table.find_all("tr")[1:]: + cells = row.find_all("td") + version_text = cells[0].get_text(separator=" ").strip() + date_text = cells[2].get_text(separator=" ").strip() date_match = DATE_PATTERN.search(date_text) if not date_match: