blob: ed0c0ad827b114aa61d9d77fd748dff5b0258fba [file] [log] [blame]
#!/usr/bin/env python3
"""
A script that can be used to query maven.google.com to get information about androidx artifacts to
see what stable/latest versions are available and when they were released.
Usage:
./librarystats.py
"""
from datetime import datetime
import requests
import re
import os
from xml.dom.minidom import parseString
current_directory = os.path.dirname(__file__)
libraries = []
docs_public_build = os.path.join(current_directory, r'../docs-public/build.gradle')
with open(docs_public_build, "r") as f:
build_file_contents = f.read()
p = re.compile('\("(androidx\..*)\:[0-9]+\.[0-9]+\.[0-9]+.*"\)')
libraries = [val for val in p.findall(build_file_contents) if not val.endswith("-samples")]
cache_directory = os.path.join(current_directory, r'cache')
if not os.path.exists(cache_directory):
os.makedirs(cache_directory)
def getOrDownloadMetadata(library_to_fetch):
cache_file_name = "cache/" + library_to_fetch + ".xml"
if os.path.isfile(cache_file_name):
with open(cache_file_name, "r") as f:
return f.read()
url = "https://dl.google.com/android/maven2/" + library_to_fetch.replace(".", "/").replace(":", "/") + "/maven-metadata.xml"
r = requests.get(url, allow_redirects=True)
if not r.ok:
return None
with open(cache_file_name, "w") as f:
f.write(r.text)
return r.text
def getOrDownloadUpdatedDate(library_to_fetch, version_to_fetch):
cache_file_name = "cache/" + library_to_fetch + "-" + version_to_fetch + ".txt"
if os.path.isfile(cache_file_name):
with open(cache_file_name, "r") as f:
return f.read()
artifact_id = library_to_fetch.split(":")[-1]
url = "https://dl.google.com/android/maven2/" + library_to_fetch.replace(".", "/").replace(":", "/") + "/" + version_to_fetch + "/" + artifact_id + "-" + version_to_fetch + ".pom"
r = requests.get(url, allow_redirects=True)
last_updated_pattern = "%a, %d %b %Y %H:%M:%S %Z"
timestamp = datetime.strptime(r.headers["Last-Modified"], last_updated_pattern).strftime("%Y %m %d")
with open(cache_file_name, "w") as f:
f.write(timestamp)
return timestamp
print("Library,Latest Stable,Latest Stable Release Date,Latest Version,Latest Version Release Date")
for library in libraries:
metadata = getOrDownloadMetadata(library)
if metadata is None:
print(library + ",-,-,-,-")
continue
document = parseString(metadata)
versions = [a.childNodes[0].nodeValue for a in document.getElementsByTagName("version")]
line = library + ","
latest_stable_version = None
for version in reversed(versions):
if "-" not in version:
latest_stable_version = version
break
if latest_stable_version:
line += latest_stable_version + "," + getOrDownloadUpdatedDate(library, latest_stable_version) + ","
else:
line += "-,-,"
latest_version = versions[-1]
line += latest_version + "," + getOrDownloadUpdatedDate(library, latest_version)
print(line)