Make the script more readable, mostly by: - using the Product class, - removing the use of functions when unnecessary, - a little bit of renaming and documentation.
42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
import re
|
|
from bs4 import BeautifulSoup
|
|
from common import dates
|
|
from common import endoflife
|
|
from common import http
|
|
|
|
IDENTIFIERS_BY_PRODUCT = {
|
|
"pan-os": "pan-os-panorama",
|
|
"pan-gp": "globalprotect",
|
|
"pan-cortex-xdr": "traps-esm-and-cortex",
|
|
}
|
|
|
|
# all products are on the same page, it's faster to fetch it only once
|
|
print("::group::palo-alto-networks")
|
|
response = http.fetch_url("https://www.paloaltonetworks.com/services/support/end-of-life-announcements/end-of-life-summary")
|
|
soup = BeautifulSoup(response.text, features="html5lib")
|
|
print("::endgroup::")
|
|
|
|
for product_name, identifier in IDENTIFIERS_BY_PRODUCT.items():
|
|
print(f"::group::{product_name}")
|
|
product = endoflife.Product(product_name)
|
|
|
|
table = soup.find(id=identifier)
|
|
for tr in table.findAll("tr")[3:]:
|
|
td_list = tr.findAll("td")
|
|
if len(td_list) <= 1:
|
|
continue
|
|
|
|
version = td_list[0].get_text().strip().lower().replace(" ", "-").replace("*", "")
|
|
version = version.removesuffix("-(cortex-xdr-agent)")
|
|
version = version.removesuffix("-(vm-series-only)")
|
|
version = version.removesuffix("-(panorama-only)")
|
|
|
|
# A few dates have 1st, 2nd, 4th... Remove it.
|
|
date_str = re.sub(r'(\w+) (\d{1,2})\w{2}, (\d{4})', r'\1 \2, \3', td_list[1].get_text())
|
|
date = dates.parse_date(date_str)
|
|
|
|
product.declare_version(version, date)
|
|
|
|
product.write()
|
|
print("::endgroup::")
|