Align custom scripts with generic scripts (#445)
Align custom scripts with generic scripts, making them configurable. This has a few advantages: - script code is more unified, - no more hard-coded method names in scripts, which is less error prone and make it easier to rename scripts, - no more hard coded product names in scripts, which is less error prone and make it easier to rename products, - less hard-coded URLs and regexes in scripts, which makes auto-configuration more expressive / updatable, Also added method `endoflife.list_configs_from_argv()` so that it is easier to manipulate scripts arguments.
This commit is contained in:
@@ -2,31 +2,32 @@ import re
|
||||
import xml.dom.minidom
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from common import dates, http, releasedata
|
||||
from common import dates, endoflife, http, releasedata
|
||||
|
||||
"""Fetch Looker versions from the Google Cloud release notes RSS feed.
|
||||
"""
|
||||
|
||||
ANNOUNCEMENT_PATTERN = re.compile(r"includes\s+the\s+following\s+changes", re.IGNORECASE)
|
||||
VERSION_PATTERN = re.compile(r"Looker\s+(?P<version>\d+\.\d+)", re.IGNORECASE)
|
||||
|
||||
with releasedata.ProductData("looker") as product_data:
|
||||
response = http.fetch_url("https://cloud.google.com/feeds/looker-release-notes.xml")
|
||||
rss = xml.dom.minidom.parseString(response.text)
|
||||
for config in endoflife.list_configs_from_argv():
|
||||
with releasedata.ProductData(config.product) as product_data:
|
||||
response = http.fetch_url(config.url)
|
||||
rss = xml.dom.minidom.parseString(response.text)
|
||||
|
||||
for item in rss.getElementsByTagName("entry"):
|
||||
content = item.getElementsByTagName("content")[0].firstChild.nodeValue
|
||||
content_soup = BeautifulSoup(content, features="html5lib")
|
||||
for item in rss.getElementsByTagName("entry"):
|
||||
content = item.getElementsByTagName("content")[0].firstChild.nodeValue
|
||||
content_soup = BeautifulSoup(content, features="html5lib")
|
||||
|
||||
announcement_match = content_soup.find(string=ANNOUNCEMENT_PATTERN)
|
||||
if not announcement_match:
|
||||
continue
|
||||
announcement_match = content_soup.find(string=ANNOUNCEMENT_PATTERN)
|
||||
if not announcement_match:
|
||||
continue
|
||||
|
||||
version_match = VERSION_PATTERN.search(announcement_match.parent.get_text())
|
||||
if not version_match:
|
||||
continue
|
||||
version_match = config.first_match(announcement_match.parent.get_text())
|
||||
if not version_match:
|
||||
continue
|
||||
version = config.render(version_match)
|
||||
|
||||
version = version_match.group("version")
|
||||
date_str = item.getElementsByTagName("updated")[0].firstChild.nodeValue
|
||||
date = dates.parse_datetime(date_str)
|
||||
product_data.declare_version(version, date)
|
||||
date_str = item.getElementsByTagName("updated")[0].firstChild.nodeValue
|
||||
date = dates.parse_datetime(date_str)
|
||||
|
||||
product_data.declare_version(version, date)
|
||||
|
||||
Reference in New Issue
Block a user