scripts: Move changelog URLs to JSON

This commit is contained in:
Florian Bruhin 2022-01-10 10:01:29 +01:00
parent d491da13cc
commit 10267f70e3
3 changed files with 166 additions and 163 deletions

View File

@ -0,0 +1,162 @@
{
"pyparsing": "https://github.com/pyparsing/pyparsing/blob/master/CHANGES",
"pylint": "https://pylint.pycqa.org/en/latest/whatsnew/changelog.html",
"isort": "https://pycqa.github.io/isort/CHANGELOG/",
"lazy-object-proxy": "https://github.com/ionelmc/python-lazy-object-proxy/blob/master/CHANGELOG.rst",
"mccabe": "https://github.com/PyCQA/mccabe#changes",
"pytest-cov": "https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst",
"pytest-xdist": "https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst",
"pytest-forked": "https://github.com/pytest-dev/pytest-forked/blob/master/CHANGELOG.rst",
"pytest-xvfb": "https://github.com/The-Compiler/pytest-xvfb/blob/master/CHANGELOG.rst",
"EasyProcess": "https://github.com/ponty/EasyProcess/commits/master",
"PyVirtualDisplay": "https://github.com/ponty/PyVirtualDisplay/commits/master",
"execnet": "https://execnet.readthedocs.io/en/latest/changelog.html",
"pytest-rerunfailures": "https://github.com/pytest-dev/pytest-rerunfailures/blob/master/CHANGES.rst",
"pytest-repeat": "https://github.com/pytest-dev/pytest-repeat/blob/master/CHANGES.rst",
"requests": "https://github.com/psf/requests/blob/master/HISTORY.md",
"requests-file": "https://github.com/dashea/requests-file/blob/master/CHANGES.rst",
"Werkzeug": "https://werkzeug.palletsprojects.com/en/latest/changes/",
"click": "https://click.palletsprojects.com/en/latest/changes/",
"itsdangerous": "https://itsdangerous.palletsprojects.com/en/latest/changes/",
"parse-type": "https://github.com/jenisys/parse_type/blob/master/CHANGES.txt",
"sortedcontainers": "https://github.com/grantjenks/python-sortedcontainers/blob/master/HISTORY.rst",
"soupsieve": "https://facelessuser.github.io/soupsieve/about/changelog/",
"Flask": "https://flask.palletsprojects.com/en/latest/changes/",
"Mako": "https://docs.makotemplates.org/en/latest/changelog.html",
"glob2": "https://github.com/miracle2k/python-glob2/blob/master/CHANGES",
"hypothesis": "https://hypothesis.readthedocs.io/en/latest/changes.html",
"mypy": "https://mypy-lang.blogspot.com/",
"types-PyYAML": "https://github.com/python/typeshed/commits/master/stubs/PyYAML",
"types-dataclasses": "https://github.com/python/typeshed/commits/master/stubs/dataclasses",
"pytest": "https://docs.pytest.org/en/latest/changelog.html",
"iniconfig": "https://github.com/RonnyPfannschmidt/iniconfig/blob/master/CHANGELOG",
"tox": "https://tox.readthedocs.io/en/latest/changelog.html",
"PyYAML": "https://github.com/yaml/pyyaml/blob/master/CHANGES",
"pytest-bdd": "https://github.com/pytest-dev/pytest-bdd/blob/master/CHANGES.rst",
"snowballstemmer": "https://github.com/snowballstem/snowball/blob/master/NEWS",
"virtualenv": "https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst",
"packaging": "https://packaging.pypa.io/en/latest/changelog.html",
"build": "https://github.com/pypa/build/blob/main/CHANGELOG.rst",
"attrs": "https://www.attrs.org/en/stable/changelog.html",
"Jinja2": "https://jinja.palletsprojects.com/en/latest/changes/",
"MarkupSafe": "https://markupsafe.palletsprojects.com/en/latest/changes/",
"flake8": "https://github.com/PyCQA/flake8/tree/main/docs/source/release-notes",
"flake8-docstrings": "https://pypi.org/project/flake8-docstrings/",
"flake8-debugger": "https://github.com/JBKahn/flake8-debugger/",
"flake8-builtins": "https://github.com/gforcada/flake8-builtins/blob/master/CHANGES.rst",
"flake8-bugbear": "https://github.com/PyCQA/flake8-bugbear#change-log",
"flake8-tidy-imports": "https://github.com/adamchainz/flake8-tidy-imports/blob/master/HISTORY.rst",
"flake8-tuple": "https://github.com/ar4s/flake8_tuple/blob/master/HISTORY.rst",
"flake8-comprehensions": "https://github.com/adamchainz/flake8-comprehensions/blob/master/HISTORY.rst",
"flake8-copyright": "https://github.com/savoirfairelinux/flake8-copyright/blob/master/CHANGELOG.rst",
"flake8-deprecated": "https://github.com/gforcada/flake8-deprecated/blob/master/CHANGES.rst",
"flake8-future-import": "https://github.com/xZise/flake8-future-import#changes",
"flake8-mock": "https://github.com/aleGpereira/flake8-mock#changes",
"flake8-polyfill": "https://gitlab.com/pycqa/flake8-polyfill/-/blob/master/CHANGELOG.rst",
"flake8-string-format": "https://github.com/xZise/flake8-string-format#changes",
"flake8-plugin-utils": "https://github.com/afonasev/flake8-plugin-utils#change-log",
"flake8-pytest-style": "https://github.com/m-burst/flake8-pytest-style#change-log",
"pep8-naming": "https://github.com/PyCQA/pep8-naming/blob/master/CHANGELOG.rst",
"pycodestyle": "https://github.com/PyCQA/pycodestyle/blob/master/CHANGES.txt",
"pyflakes": "https://github.com/PyCQA/pyflakes/blob/master/NEWS.rst",
"cffi": "https://github.com/python-cffi/release-doc/blob/master/doc/source/whatsnew.rst",
"astroid": "https://github.com/PyCQA/astroid/blob/main/ChangeLog",
"pytest-instafail": "https://github.com/pytest-dev/pytest-instafail/blob/master/CHANGES.rst",
"coverage": "https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst",
"colorama": "https://github.com/tartley/colorama/blob/master/CHANGELOG.rst",
"hunter": "https://github.com/ionelmc/python-hunter/blob/master/CHANGELOG.rst",
"uritemplate": "https://github.com/python-hyper/uritemplate/blob/master/HISTORY.rst",
"more-itertools": "https://github.com/erikrose/more-itertools/blob/master/docs/versions.rst",
"pydocstyle": "https://www.pydocstyle.org/en/latest/release_notes.html",
"Sphinx": "https://www.sphinx-doc.org/en/master/changes.html",
"Babel": "https://github.com/python-babel/babel/blob/master/CHANGES",
"alabaster": "https://alabaster.readthedocs.io/en/latest/changelog.html",
"imagesize": "https://github.com/shibukawa/imagesize_py/commits/master",
"pytz": "https://mm.icann.org/pipermail/tz-announce/",
"sphinxcontrib-applehelp": "https://www.sphinx-doc.org/en/master/changes.html",
"sphinxcontrib-devhelp": "https://www.sphinx-doc.org/en/master/changes.html",
"sphinxcontrib-htmlhelp": "https://www.sphinx-doc.org/en/master/changes.html",
"sphinxcontrib-jsmath": "https://www.sphinx-doc.org/en/master/changes.html",
"sphinxcontrib-qthelp": "https://www.sphinx-doc.org/en/master/changes.html",
"sphinxcontrib-serializinghtml": "https://www.sphinx-doc.org/en/master/changes.html",
"jaraco.functools": "https://github.com/jaraco/jaraco.functools/blob/master/CHANGES.rst",
"parse": "https://github.com/r1chardj0n3s/parse#potential-gotchas",
"py": "https://py.readthedocs.io/en/latest/changelog.html#changelog",
"Pympler": "https://github.com/pympler/pympler/blob/master/CHANGELOG.md",
"pytest-mock": "https://github.com/pytest-dev/pytest-mock/blob/master/CHANGELOG.rst",
"pytest-qt": "https://github.com/pytest-dev/pytest-qt/blob/master/CHANGELOG.rst",
"pyinstaller": "https://pyinstaller.readthedocs.io/en/stable/CHANGES.html",
"pyinstaller-hooks-contrib": "https://github.com/pyinstaller/pyinstaller-hooks-contrib/blob/master/CHANGELOG.rst",
"pytest-benchmark": "https://pytest-benchmark.readthedocs.io/en/stable/changelog.html",
"typed-ast": "https://github.com/python/typed_ast/commits/master",
"docutils": "https://docutils.sourceforge.io/RELEASE-NOTES.html",
"bump2version": "https://github.com/c4urself/bump2version/blob/master/CHANGELOG.md",
"six": "https://github.com/benjaminp/six/blob/master/CHANGES",
"altgraph": "https://github.com/ronaldoussoren/altgraph/blob/master/doc/changelog.rst",
"urllib3": "https://github.com/urllib3/urllib3/blob/master/CHANGES.rst",
"lxml": "https://github.com/lxml/lxml/blob/master/CHANGES.txt",
"jwcrypto": "https://github.com/latchset/jwcrypto/commits/master",
"wrapt": "https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst",
"pep517": "https://github.com/pypa/pep517/blob/master/doc/changelog.rst",
"cryptography": "https://cryptography.io/en/latest/changelog.html",
"toml": "https://github.com/uiri/toml/releases",
"tomli": "https://github.com/hukkin/tomli/blob/master/CHANGELOG.md",
"PyQt5": "https://www.riverbankcomputing.com/news",
"PyQt5-Qt5": "https://www.riverbankcomputing.com/news",
"PyQtWebEngine": "https://www.riverbankcomputing.com/news",
"PyQtWebEngine-Qt5": "https://www.riverbankcomputing.com/news",
"PyQt-builder": "https://www.riverbankcomputing.com/news",
"PyQt5-sip": "https://www.riverbankcomputing.com/news",
"PyQt5-stubs": "https://github.com/stlehmann/PyQt5-stubs/blob/master/CHANGELOG.md",
"sip": "https://www.riverbankcomputing.com/news",
"Pygments": "https://pygments.org/docs/changelog/",
"vulture": "https://github.com/jendrikseipp/vulture/blob/master/CHANGELOG.md",
"distlib": "https://github.com/pypa/distlib/blob/master/CHANGES.rst",
"py-cpuinfo": "https://github.com/workhorsy/py-cpuinfo/blob/master/ChangeLog",
"cheroot": "https://cheroot.cherrypy.dev/en/latest/history.html",
"certifi": "https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport",
"chardet": "https://github.com/chardet/chardet/releases",
"charset-normalizer": "https://github.com/Ousret/charset_normalizer/blob/master/CHANGELOG.md",
"idna": "https://github.com/kjd/idna/blob/master/HISTORY.rst",
"tldextract": "https://github.com/john-kurkowski/tldextract/blob/master/CHANGELOG.md",
"typing_extensions": "https://github.com/python/typing/blob/master/typing_extensions/CHANGELOG",
"diff-cover": "https://github.com/Bachmann1234/diff_cover/blob/master/CHANGELOG",
"pytest-icdiff": "https://github.com/hjwp/pytest-icdiff/blob/master/HISTORY.rst",
"icdiff": "https://github.com/jeffkaufman/icdiff/blob/master/ChangeLog",
"pprintpp": "https://github.com/wolever/pprintpp/blob/master/CHANGELOG.txt",
"beautifulsoup4": "https://bazaar.launchpad.net/~leonardr/beautifulsoup/bs4/view/head:/CHANGELOG",
"check-manifest": "https://github.com/mgedmin/check-manifest/blob/master/CHANGES.rst",
"yamllint": "https://github.com/adrienverge/yamllint/blob/master/CHANGELOG.rst",
"pathspec": "https://github.com/cpburnz/python-path-specification/blob/master/CHANGES.rst",
"filelock": "https://github.com/tox-dev/py-filelock/blob/main/docs/changelog.rst",
"github3.py": "https://github3py.readthedocs.io/en/master/release-notes/index.html",
"manhole": "https://github.com/ionelmc/python-manhole/blob/master/CHANGELOG.rst",
"pycparser": "https://github.com/eliben/pycparser/blob/master/CHANGES",
"python-dateutil": "https://dateutil.readthedocs.io/en/stable/changelog.html",
"platformdirs": "https://github.com/platformdirs/platformdirs/blob/main/CHANGES.rst",
"pluggy": "https://github.com/pytest-dev/pluggy/blob/master/CHANGELOG.rst",
"mypy-extensions": "https://github.com/python/mypy_extensions/commits/master",
"pyroma": "https://github.com/regebro/pyroma/blob/master/HISTORY.txt",
"adblock": "https://github.com/ArniDagur/python-adblock/blob/master/CHANGELOG.md",
"importlib-resources": "https://importlib-resources.readthedocs.io/en/latest/history.html",
"importlib-metadata": "https://github.com/python/importlib_metadata/blob/main/CHANGES.rst",
"zipp": "https://github.com/jaraco/zipp/blob/main/CHANGES.rst",
"dataclasses": "https://github.com/ericvsmith/dataclasses#release-history",
"pip": "https://pip.pypa.io/en/stable/news/",
"wheel": "https://wheel.readthedocs.io/en/stable/news.html",
"setuptools": "https://setuptools.readthedocs.io/en/latest/history.html",
"future": "https://python-future.org/whatsnew.html",
"pefile": "https://github.com/erocarrera/pefile/commits/master",
"Deprecated": "https://github.com/tantale/deprecated/blob/master/CHANGELOG.rst",
"SecretStorage": "https://github.com/mitya57/secretstorage/blob/master/changelog",
"bleach": "https://github.com/mozilla/bleach/blob/main/CHANGES",
"jeepney": "https://gitlab.com/takluyver/jeepney/-/blob/master/docs/release-notes.rst",
"keyring": "https://github.com/jaraco/keyring/blob/main/CHANGES.rst",
"pkginfo": "https://bazaar.launchpad.net/~tseaver/pkginfo/trunk/view/head:/CHANGES.txt",
"readme-renderer": "https://github.com/pypa/readme_renderer/blob/main/CHANGES.rst",
"requests-toolbelt": "https://github.com/requests/toolbelt/blob/master/HISTORY.rst",
"rfc3986": "https://rfc3986.readthedocs.io/en/latest/release-notes/index.html",
"tqdm": "https://tqdm.github.io/releases/",
"twine": "https://twine.readthedocs.io/en/stable/changelog.html",
"webencodings": "https://github.com/gsnedders/python-webencodings/commits/master"
}

View File

@ -111,7 +111,7 @@ def check_changelog_urls(_args: argparse.Namespace = None) -> bool:
utils.print_col(f"Extra changelog URLs: {req_str}", 'red')
if not ok:
print("Hint: Changelog URLs are in scripts/dev/recompile_requirements.py")
print("Hint: Changelog URLs are in scripts/dev/changelog_urls.json")
return ok

View File

@ -24,6 +24,7 @@ import re
import sys
import os.path
import glob
import json
import subprocess
import tempfile
import argparse
@ -39,168 +40,8 @@ REPO_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)),
'..', '..') # /scripts/dev -> /scripts -> /
REQ_DIR = os.path.join(REPO_DIR, 'misc', 'requirements')
CHANGELOG_URLS = {
'pyparsing': 'https://github.com/pyparsing/pyparsing/blob/master/CHANGES',
'pylint': 'https://pylint.pycqa.org/en/latest/whatsnew/changelog.html',
'isort': 'https://pycqa.github.io/isort/CHANGELOG/',
'lazy-object-proxy': 'https://github.com/ionelmc/python-lazy-object-proxy/blob/master/CHANGELOG.rst',
'mccabe': 'https://github.com/PyCQA/mccabe#changes',
'pytest-cov': 'https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst',
'pytest-xdist': 'https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst',
'pytest-forked': 'https://github.com/pytest-dev/pytest-forked/blob/master/CHANGELOG.rst',
'pytest-xvfb': 'https://github.com/The-Compiler/pytest-xvfb/blob/master/CHANGELOG.rst',
'EasyProcess': 'https://github.com/ponty/EasyProcess/commits/master',
'PyVirtualDisplay': 'https://github.com/ponty/PyVirtualDisplay/commits/master',
'execnet': 'https://execnet.readthedocs.io/en/latest/changelog.html',
'pytest-rerunfailures': 'https://github.com/pytest-dev/pytest-rerunfailures/blob/master/CHANGES.rst',
'pytest-repeat': 'https://github.com/pytest-dev/pytest-repeat/blob/master/CHANGES.rst',
'requests': 'https://github.com/psf/requests/blob/master/HISTORY.md',
'requests-file': 'https://github.com/dashea/requests-file/blob/master/CHANGES.rst',
'Werkzeug': 'https://werkzeug.palletsprojects.com/en/latest/changes/',
'click': 'https://click.palletsprojects.com/en/latest/changes/',
'itsdangerous': 'https://itsdangerous.palletsprojects.com/en/latest/changes/',
'parse-type': 'https://github.com/jenisys/parse_type/blob/master/CHANGES.txt',
'sortedcontainers': 'https://github.com/grantjenks/python-sortedcontainers/blob/master/HISTORY.rst',
'soupsieve': 'https://facelessuser.github.io/soupsieve/about/changelog/',
'Flask': 'https://flask.palletsprojects.com/en/latest/changes/',
'Mako': 'https://docs.makotemplates.org/en/latest/changelog.html',
'glob2': 'https://github.com/miracle2k/python-glob2/blob/master/CHANGES',
'hypothesis': 'https://hypothesis.readthedocs.io/en/latest/changes.html',
'mypy': 'https://mypy-lang.blogspot.com/',
'types-PyYAML': 'https://github.com/python/typeshed/commits/master/stubs/PyYAML',
'types-dataclasses': 'https://github.com/python/typeshed/commits/master/stubs/dataclasses',
'pytest': 'https://docs.pytest.org/en/latest/changelog.html',
'iniconfig': 'https://github.com/RonnyPfannschmidt/iniconfig/blob/master/CHANGELOG',
'tox': 'https://tox.readthedocs.io/en/latest/changelog.html',
'PyYAML': 'https://github.com/yaml/pyyaml/blob/master/CHANGES',
'pytest-bdd': 'https://github.com/pytest-dev/pytest-bdd/blob/master/CHANGES.rst',
'snowballstemmer': 'https://github.com/snowballstem/snowball/blob/master/NEWS',
'virtualenv': 'https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst',
'packaging': 'https://packaging.pypa.io/en/latest/changelog.html',
'build': 'https://github.com/pypa/build/blob/main/CHANGELOG.rst',
'attrs': 'https://www.attrs.org/en/stable/changelog.html',
'Jinja2': 'https://jinja.palletsprojects.com/en/latest/changes/',
'MarkupSafe': 'https://markupsafe.palletsprojects.com/en/latest/changes/',
'flake8': 'https://github.com/PyCQA/flake8/tree/main/docs/source/release-notes',
'flake8-docstrings': 'https://pypi.org/project/flake8-docstrings/',
'flake8-debugger': 'https://github.com/JBKahn/flake8-debugger/',
'flake8-builtins': 'https://github.com/gforcada/flake8-builtins/blob/master/CHANGES.rst',
'flake8-bugbear': 'https://github.com/PyCQA/flake8-bugbear#change-log',
'flake8-tidy-imports': 'https://github.com/adamchainz/flake8-tidy-imports/blob/master/HISTORY.rst',
'flake8-tuple': 'https://github.com/ar4s/flake8_tuple/blob/master/HISTORY.rst',
'flake8-comprehensions': 'https://github.com/adamchainz/flake8-comprehensions/blob/master/HISTORY.rst',
'flake8-copyright': 'https://github.com/savoirfairelinux/flake8-copyright/blob/master/CHANGELOG.rst',
'flake8-deprecated': 'https://github.com/gforcada/flake8-deprecated/blob/master/CHANGES.rst',
'flake8-future-import': 'https://github.com/xZise/flake8-future-import#changes',
'flake8-mock': 'https://github.com/aleGpereira/flake8-mock#changes',
'flake8-polyfill': 'https://gitlab.com/pycqa/flake8-polyfill/-/blob/master/CHANGELOG.rst',
'flake8-string-format': 'https://github.com/xZise/flake8-string-format#changes',
'flake8-plugin-utils': 'https://github.com/afonasev/flake8-plugin-utils#change-log',
'flake8-pytest-style': 'https://github.com/m-burst/flake8-pytest-style#change-log',
'pep8-naming': 'https://github.com/PyCQA/pep8-naming/blob/master/CHANGELOG.rst',
'pycodestyle': 'https://github.com/PyCQA/pycodestyle/blob/master/CHANGES.txt',
'pyflakes': 'https://github.com/PyCQA/pyflakes/blob/master/NEWS.rst',
'cffi': 'https://github.com/python-cffi/release-doc/blob/master/doc/source/whatsnew.rst',
'astroid': 'https://github.com/PyCQA/astroid/blob/main/ChangeLog',
'pytest-instafail': 'https://github.com/pytest-dev/pytest-instafail/blob/master/CHANGES.rst',
'coverage': 'https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst',
'colorama': 'https://github.com/tartley/colorama/blob/master/CHANGELOG.rst',
'hunter': 'https://github.com/ionelmc/python-hunter/blob/master/CHANGELOG.rst',
'uritemplate': 'https://github.com/python-hyper/uritemplate/blob/master/HISTORY.rst',
'more-itertools': 'https://github.com/erikrose/more-itertools/blob/master/docs/versions.rst',
'pydocstyle': 'https://www.pydocstyle.org/en/latest/release_notes.html',
'Sphinx': 'https://www.sphinx-doc.org/en/master/changes.html',
'Babel': 'https://github.com/python-babel/babel/blob/master/CHANGES',
'alabaster': 'https://alabaster.readthedocs.io/en/latest/changelog.html',
'imagesize': 'https://github.com/shibukawa/imagesize_py/commits/master',
'pytz': 'https://mm.icann.org/pipermail/tz-announce/',
'sphinxcontrib-applehelp': 'https://www.sphinx-doc.org/en/master/changes.html',
'sphinxcontrib-devhelp': 'https://www.sphinx-doc.org/en/master/changes.html',
'sphinxcontrib-htmlhelp': 'https://www.sphinx-doc.org/en/master/changes.html',
'sphinxcontrib-jsmath': 'https://www.sphinx-doc.org/en/master/changes.html',
'sphinxcontrib-qthelp': 'https://www.sphinx-doc.org/en/master/changes.html',
'sphinxcontrib-serializinghtml': 'https://www.sphinx-doc.org/en/master/changes.html',
'jaraco.functools': 'https://github.com/jaraco/jaraco.functools/blob/master/CHANGES.rst',
'parse': 'https://github.com/r1chardj0n3s/parse#potential-gotchas',
'py': 'https://py.readthedocs.io/en/latest/changelog.html#changelog',
'Pympler': 'https://github.com/pympler/pympler/blob/master/CHANGELOG.md',
'pytest-mock': 'https://github.com/pytest-dev/pytest-mock/blob/master/CHANGELOG.rst',
'pytest-qt': 'https://github.com/pytest-dev/pytest-qt/blob/master/CHANGELOG.rst',
'pyinstaller': 'https://pyinstaller.readthedocs.io/en/stable/CHANGES.html',
'pyinstaller-hooks-contrib': 'https://github.com/pyinstaller/pyinstaller-hooks-contrib/blob/master/CHANGELOG.rst',
'pytest-benchmark': 'https://pytest-benchmark.readthedocs.io/en/stable/changelog.html',
'typed-ast': 'https://github.com/python/typed_ast/commits/master',
'docutils': 'https://docutils.sourceforge.io/RELEASE-NOTES.html',
'bump2version': 'https://github.com/c4urself/bump2version/blob/master/CHANGELOG.md',
'six': 'https://github.com/benjaminp/six/blob/master/CHANGES',
'altgraph': 'https://github.com/ronaldoussoren/altgraph/blob/master/doc/changelog.rst',
'urllib3': 'https://github.com/urllib3/urllib3/blob/master/CHANGES.rst',
'lxml': 'https://github.com/lxml/lxml/blob/master/CHANGES.txt',
'jwcrypto': 'https://github.com/latchset/jwcrypto/commits/master',
'wrapt': 'https://github.com/GrahamDumpleton/wrapt/blob/develop/docs/changes.rst',
'pep517': 'https://github.com/pypa/pep517/blob/master/doc/changelog.rst',
'cryptography': 'https://cryptography.io/en/latest/changelog.html',
'toml': 'https://github.com/uiri/toml/releases',
'tomli': 'https://github.com/hukkin/tomli/blob/master/CHANGELOG.md',
'PyQt5': 'https://www.riverbankcomputing.com/news',
'PyQt5-Qt5': 'https://www.riverbankcomputing.com/news',
'PyQtWebEngine': 'https://www.riverbankcomputing.com/news',
'PyQtWebEngine-Qt5': 'https://www.riverbankcomputing.com/news',
'PyQt-builder': 'https://www.riverbankcomputing.com/news',
'PyQt5-sip': 'https://www.riverbankcomputing.com/news',
'PyQt5-stubs': 'https://github.com/stlehmann/PyQt5-stubs/blob/master/CHANGELOG.md',
'sip': 'https://www.riverbankcomputing.com/news',
'Pygments': 'https://pygments.org/docs/changelog/',
'vulture': 'https://github.com/jendrikseipp/vulture/blob/master/CHANGELOG.md',
'distlib': 'https://github.com/pypa/distlib/blob/master/CHANGES.rst',
'py-cpuinfo': 'https://github.com/workhorsy/py-cpuinfo/blob/master/ChangeLog',
'cheroot': 'https://cheroot.cherrypy.dev/en/latest/history.html',
'certifi': 'https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport',
'chardet': 'https://github.com/chardet/chardet/releases',
'charset-normalizer': 'https://github.com/Ousret/charset_normalizer/blob/master/CHANGELOG.md',
'idna': 'https://github.com/kjd/idna/blob/master/HISTORY.rst',
'tldextract': 'https://github.com/john-kurkowski/tldextract/blob/master/CHANGELOG.md',
'typing_extensions': 'https://github.com/python/typing/blob/master/typing_extensions/CHANGELOG',
'diff-cover': 'https://github.com/Bachmann1234/diff_cover/blob/master/CHANGELOG',
'pytest-icdiff': 'https://github.com/hjwp/pytest-icdiff/blob/master/HISTORY.rst',
'icdiff': 'https://github.com/jeffkaufman/icdiff/blob/master/ChangeLog',
'pprintpp': 'https://github.com/wolever/pprintpp/blob/master/CHANGELOG.txt',
'beautifulsoup4': 'https://bazaar.launchpad.net/~leonardr/beautifulsoup/bs4/view/head:/CHANGELOG',
'check-manifest': 'https://github.com/mgedmin/check-manifest/blob/master/CHANGES.rst',
'yamllint': 'https://github.com/adrienverge/yamllint/blob/master/CHANGELOG.rst',
'pathspec': 'https://github.com/cpburnz/python-path-specification/blob/master/CHANGES.rst',
'filelock': 'https://github.com/tox-dev/py-filelock/blob/main/docs/changelog.rst',
'github3.py': 'https://github3py.readthedocs.io/en/master/release-notes/index.html',
'manhole': 'https://github.com/ionelmc/python-manhole/blob/master/CHANGELOG.rst',
'pycparser': 'https://github.com/eliben/pycparser/blob/master/CHANGES',
'python-dateutil': 'https://dateutil.readthedocs.io/en/stable/changelog.html',
'platformdirs': 'https://github.com/platformdirs/platformdirs/blob/main/CHANGES.rst',
'pluggy': 'https://github.com/pytest-dev/pluggy/blob/master/CHANGELOG.rst',
'mypy-extensions': 'https://github.com/python/mypy_extensions/commits/master',
'pyroma': 'https://github.com/regebro/pyroma/blob/master/HISTORY.txt',
'adblock': 'https://github.com/ArniDagur/python-adblock/blob/master/CHANGELOG.md',
'importlib-resources': 'https://importlib-resources.readthedocs.io/en/latest/history.html',
'importlib-metadata': 'https://github.com/python/importlib_metadata/blob/main/CHANGES.rst',
'zipp': 'https://github.com/jaraco/zipp/blob/main/CHANGES.rst',
'dataclasses': 'https://github.com/ericvsmith/dataclasses#release-history',
'pip': 'https://pip.pypa.io/en/stable/news/',
'wheel': 'https://wheel.readthedocs.io/en/stable/news.html',
'setuptools': 'https://setuptools.readthedocs.io/en/latest/history.html',
'future': 'https://python-future.org/whatsnew.html',
'pefile': 'https://github.com/erocarrera/pefile/commits/master',
'Deprecated': 'https://github.com/tantale/deprecated/blob/master/CHANGELOG.rst',
'SecretStorage': 'https://github.com/mitya57/secretstorage/blob/master/changelog',
'bleach': 'https://github.com/mozilla/bleach/blob/main/CHANGES',
'jeepney': 'https://gitlab.com/takluyver/jeepney/-/blob/master/docs/release-notes.rst',
'keyring': 'https://github.com/jaraco/keyring/blob/main/CHANGES.rst',
'pkginfo': 'https://bazaar.launchpad.net/~tseaver/pkginfo/trunk/view/head:/CHANGES.txt',
'readme-renderer': 'https://github.com/pypa/readme_renderer/blob/main/CHANGES.rst',
'requests-toolbelt': 'https://github.com/requests/toolbelt/blob/master/HISTORY.rst',
'rfc3986': 'https://rfc3986.readthedocs.io/en/latest/release-notes/index.html',
'tqdm': 'https://tqdm.github.io/releases/',
'twine': 'https://twine.readthedocs.io/en/stable/changelog.html',
'webencodings': 'https://github.com/gsnedders/python-webencodings/commits/master',
}
CHANGELOG_URLS_PATH = pathlib.Path(__file__).parent / "changelog_urls.json"
CHANGELOG_URLS = json.loads(CHANGELOG_URLS_PATH.read_text())
def convert_line(line, comments):