import re
import textwrap
from collections import defaultdict
from urllib import request
def get_supported_versions(url):
with request.urlopen(url) as response:
response_content = response.read()
content = response_content.decode("utf-8")
def parse_supported_versions(content):
def cut_by_content(content, cut_from, cut_to):
return content.split(cut_from)[1].split(cut_to)[0]
def keys_from_content(content):
return re.findall(r"
(.*?) | ", content)
content = cut_by_content(
content,
'',
"",
)
content = cut_by_content(content, '', "")
versions = keys_from_content(content)
version_dict = dict(zip(versions[::2], versions[1::2]))
django_to_python = {
version_to_tuple(python_version): [
version_to_tuple(version_string)
for version_string in re.findall(
r"(?={b},<{c}" for a, b, c in lines]
return "deps = \n" + textwrap.indent("\n".join(lines), prefix=" ")
def build_pypi_classifiers(python_to_django):
classifiers = []
all_python_versions = python_to_django.keys()
for python_version in all_python_versions:
classifiers.append(
f"Programming Language :: Python :: {env_format(python_version, divider='.')}"
)
all_django_versions = set()
for django_versions in python_to_django.values():
for django_version in django_versions:
all_django_versions.add(django_version)
classifiers.append("...")
for django_version in all_django_versions:
classifiers.append(
f"Programming Language :: Django :: {env_format(django_version, divider='.')}"
)
return "classifiers=[\n" + textwrap.indent(
"\n".join(classifiers), prefix=" "
)
def main():
django_to_python = get_supported_versions(
"https://docs.djangoproject.com/en/dev/faq/install/"
)
latest_version = get_latest_version(
"https://www.djangoproject.com/download/"
)
python_to_django = build_python_to_django(django_to_python, latest_version)
tox_envlist = build_tox_envlist(python_to_django)
print("Add this to tox.ini:\n")
print("[tox]")
print(tox_envlist)
print()
gh_actions_envlist = build_gh_actions_envlist(python_to_django)
print("[gh-actions]")
print(gh_actions_envlist)
print()
deps_envlist = build_deps_envlist(python_to_django)
print("[testenv]")
print(deps_envlist)
print()
print()
print("Add this to setup.py:\n")
pypi_classifiers = build_pypi_classifiers(python_to_django)
print(pypi_classifiers)
if __name__ == "__main__":
main()