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 build_readme(python_to_django):
print(
textwrap.dedent(
"""\
| Python version | Django version |
|----------------|--------------------------|
""".rstrip()
)
)
lines = [
(
env_format(python_version, divider="."),
", ".join(
env_format(version, divider=".") for version in django_versions
),
)
for python_version, django_versions in python_to_django.items()
]
lines = [f"| {a: <14} | {b: <24} |" for a, b in lines]
version_lines = "\n".join([version for version in lines])
return version_lines
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)
print()
print()
print("Add this to README:\n")
readme = build_readme(python_to_django)
print(readme)
print()
if __name__ == "__main__":
main()