From 22301d713a320e11b665504ae701f4b8bc4d11d5 Mon Sep 17 00:00:00 2001 From: Feanil Patel Date: Fri, 6 Mar 2026 12:12:21 -0500 Subject: [PATCH 1/3] chore: drop Python 3.11 support Remove Python 3.11 from the CI matrix, tox envlist, pypi-publish workflow, and setup.py classifiers. Python 3.12 remains. Part of the Open edX initiative to drop Python 3.11 support: https://github.com/openedx/public-engineering/issues/499 Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/ci.yml | 4 ++-- .github/workflows/pypi-publish.yml | 2 +- setup.py | 1 - tox.ini | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3992161..fda34b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - python-version: ["3.11", "3.12"] + python-version: ["3.12"] toxenv: [django52-drflatest, quality] steps: @@ -38,7 +38,7 @@ jobs: run: tox - name: Run Coverage - if: matrix.python-version == '3.12' && matrix.toxenv=='django42-drflatest' + if: matrix.python-version == '3.12' && matrix.toxenv=='django52-drflatest' uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/pypi-publish.yml b/.github/workflows/pypi-publish.yml index a2f4aef..34124ed 100644 --- a/.github/workflows/pypi-publish.yml +++ b/.github/workflows/pypi-publish.yml @@ -15,7 +15,7 @@ jobs: - name: setup python uses: actions/setup-python@v5 with: - python-version: 3.11 + python-version: 3.12 - name: Install pip run: pip install -r requirements/pip.txt diff --git a/setup.py b/setup.py index fdbea3f..fcdd7b0 100644 --- a/setup.py +++ b/setup.py @@ -177,7 +177,6 @@ def is_requirement(line): "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ], ) diff --git a/tox.ini b/tox.ini index 5eae9e2..f859fc7 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] envlist = - py{311,312}-django{52}-drf{latest} + py{312}-django{52}-drf{latest} quality [pytest] From 983f2d516e05446001d5e0fd070b63d34172c388 Mon Sep 17 00:00:00 2001 From: Feanil Patel Date: Fri, 6 Mar 2026 12:14:13 -0500 Subject: [PATCH 2/3] chore: upgrade Python requirements for Python 3.12 Regenerate all pinned requirements files using Python 3.12. Co-Authored-By: Claude Sonnet 4.6 --- requirements/base.txt | 12 +++--- requirements/ci.txt | 20 +++++---- requirements/dev.txt | 85 ++++++++++++++++++-------------------- requirements/doc.txt | 44 +++++++++----------- requirements/pip-tools.txt | 4 +- requirements/pip.txt | 6 +-- requirements/quality.txt | 48 ++++++++++----------- requirements/test.txt | 14 +++---- 8 files changed, 110 insertions(+), 123 deletions(-) diff --git a/requirements/base.txt b/requirements/base.txt index 5439a2e..23fbe32 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,12 +1,12 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -asgiref==3.11.0 +asgiref==3.11.1 # via django -django==5.2.10 +django==5.2.12 # via # -c requirements/common_constraints.txt # -r requirements/base.in @@ -16,13 +16,13 @@ djangorestframework==3.16.1 # via # -r requirements/base.in # drf-yasg -drf-yasg==1.21.14 +drf-yasg==1.21.15 # via -r requirements/base.in inflection==0.5.1 # via drf-yasg packaging==26.0 # via drf-yasg -pytz==2025.2 +pytz==2026.1.post1 # via drf-yasg pyyaml==6.0.3 # via drf-yasg @@ -32,5 +32,5 @@ uritemplate==4.2.0 # via drf-yasg # The following packages are considered to be unsafe in a requirements file: -setuptools==80.10.2 +setuptools==82.0.0 # via -r requirements/base.in diff --git a/requirements/ci.txt b/requirements/ci.txt index df2202b..ae0016f 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,34 +1,38 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -cachetools==6.2.6 - # via tox -chardet==5.2.0 +cachetools==7.0.3 # via tox colorama==0.4.6 # via tox distlib==0.4.0 # via virtualenv -filelock==3.20.3 +filelock==3.25.0 # via + # python-discovery # tox # virtualenv packaging==26.0 # via # pyproject-api # tox -platformdirs==4.5.1 +platformdirs==4.9.4 # via + # python-discovery # tox # virtualenv pluggy==1.6.0 # via tox pyproject-api==1.10.0 # via tox -tox==4.34.1 +python-discovery==1.1.0 + # via virtualenv +tomli-w==1.2.0 + # via tox +tox==4.48.1 # via -r requirements/ci.in -virtualenv==20.36.1 +virtualenv==21.1.0 # via tox diff --git a/requirements/dev.txt b/requirements/dev.txt index fd48950..42ea41a 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,31 +1,27 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -asgiref==3.11.0 +asgiref==3.11.1 # via # -r requirements/quality.txt # django -astroid==4.0.3 +astroid==4.0.4 # via # -r requirements/quality.txt # pylint # pylint-celery -backports-tarfile==1.2.0 - # via - # -r requirements/quality.txt - # jaraco-context build==1.4.0 # via # -r requirements/pip-tools.txt # pip-tools -cachetools==6.2.6 +cachetools==7.0.3 # via # -r requirements/ci.txt # tox -certifi==2026.1.4 +certifi==2026.2.25 # via # -r requirements/quality.txt # requests @@ -33,12 +29,9 @@ cffi==2.0.0 # via # -r requirements/quality.txt # cryptography -chardet==5.2.0 - # via - # -r requirements/ci.txt - # diff-cover - # tox -charset-normalizer==3.4.4 +chardet==7.0.1 + # via diff-cover +charset-normalizer==3.4.5 # via # -r requirements/quality.txt # requests @@ -54,7 +47,7 @@ click-log==0.4.0 # via # -r requirements/quality.txt # edx-lint -code-annotations==2.3.0 +code-annotations==2.3.2 # via # -r requirements/quality.txt # edx-lint @@ -62,11 +55,11 @@ colorama==0.4.6 # via # -r requirements/ci.txt # tox -coverage[toml]==7.13.2 +coverage[toml]==7.13.4 # via # -r requirements/quality.txt # pytest-cov -cryptography==46.0.4 +cryptography==46.0.5 # via # -r requirements/quality.txt # secretstorage @@ -80,7 +73,7 @@ distlib==0.4.0 # via # -r requirements/ci.txt # virtualenv -django==5.2.10 +django==5.2.12 # via # -c requirements/common_constraints.txt # -r requirements/quality.txt @@ -95,18 +88,19 @@ docutils==0.22.4 # via # -r requirements/quality.txt # readme-renderer -drf-yasg==1.21.14 +drf-yasg==1.21.15 # via -r requirements/quality.txt edx-i18n-tools==1.9.0 # via -r requirements/dev.in edx-lint==5.6.0 # via -r requirements/quality.txt -filelock==3.20.3 +filelock==3.25.0 # via # -r requirements/ci.txt + # python-discovery # tox # virtualenv -id==1.5.0 +id==1.6.1 # via # -r requirements/quality.txt # twine @@ -114,10 +108,6 @@ idna==3.11 # via # -r requirements/quality.txt # requests -importlib-metadata==8.7.1 - # via - # -r requirements/quality.txt - # keyring inflection==0.5.1 # via # -r requirements/quality.txt @@ -126,7 +116,7 @@ iniconfig==2.3.0 # via # -r requirements/quality.txt # pytest -isort==7.0.0 +isort==8.0.1 # via # -r requirements/quality.txt # pylint @@ -160,7 +150,7 @@ lxml[html-clean]==6.0.2 # via # edx-i18n-tools # lxml-html-clean -lxml-html-clean==0.4.3 +lxml-html-clean==0.4.4 # via lxml markdown-it-py==4.0.0 # via @@ -183,7 +173,7 @@ more-itertools==10.8.0 # -r requirements/quality.txt # jaraco-classes # jaraco-functools -nh3==0.3.2 +nh3==0.3.3 # via # -r requirements/quality.txt # readme-renderer @@ -201,13 +191,14 @@ packaging==26.0 # wheel path==16.16.0 # via edx-i18n-tools -pip-tools==7.5.2 +pip-tools==7.5.3 # via -r requirements/pip-tools.txt -platformdirs==4.5.1 +platformdirs==4.9.4 # via # -r requirements/ci.txt # -r requirements/quality.txt # pylint + # python-discovery # tox # virtualenv pluggy==1.6.0 @@ -235,7 +226,7 @@ pygments==2.19.2 # pytest # readme-renderer # rich -pylint==4.0.4 +pylint==4.0.5 # via # -r requirements/quality.txt # edx-lint @@ -271,13 +262,17 @@ pytest==9.0.2 # pytest-django pytest-cov==7.0.0 # via -r requirements/quality.txt -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/quality.txt +python-discovery==1.1.0 + # via + # -r requirements/ci.txt + # virtualenv python-slugify==8.0.4 # via # -r requirements/quality.txt # code-annotations -pytz==2025.2 +pytz==2026.1.post1 # via # -r requirements/quality.txt # drf-yasg @@ -294,7 +289,6 @@ readme-renderer==44.0 requests==2.32.5 # via # -r requirements/quality.txt - # id # requests-toolbelt # twine requests-toolbelt==1.0.0 @@ -305,7 +299,7 @@ rfc3986==2.0.0 # via # -r requirements/quality.txt # twine -rich==14.3.1 +rich==14.3.3 # via # -r requirements/quality.txt # twine @@ -325,7 +319,7 @@ sqlparse==0.5.5 # via # -r requirements/quality.txt # django -stevedore==5.6.0 +stevedore==5.7.0 # via # -r requirements/quality.txt # code-annotations @@ -333,11 +327,15 @@ text-unidecode==1.3 # via # -r requirements/quality.txt # python-slugify +tomli-w==1.2.0 + # via + # -r requirements/ci.txt + # tox tomlkit==0.14.0 # via # -r requirements/quality.txt # pylint -tox==4.34.1 +tox==4.48.1 # via -r requirements/ci.txt twine==6.2.0 # via -r requirements/quality.txt @@ -348,9 +346,10 @@ uritemplate==4.2.0 urllib3==2.6.3 # via # -r requirements/quality.txt + # id # requests # twine -virtualenv==20.36.1 +virtualenv==21.1.0 # via # -r requirements/ci.txt # tox @@ -358,15 +357,11 @@ wheel==0.46.3 # via # -r requirements/pip-tools.txt # pip-tools -zipp==3.23.0 - # via - # -r requirements/quality.txt - # importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==25.3 +pip==26.0.1 # via pip-tools -setuptools==80.10.2 +setuptools==82.0.0 # via # -r requirements/quality.txt # pip-tools diff --git a/requirements/doc.txt b/requirements/doc.txt index 64c3af8..ff9b159 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade @@ -8,31 +8,29 @@ accessible-pygments==0.0.5 # via pydata-sphinx-theme alabaster==1.0.0 # via sphinx -asgiref==3.11.0 +asgiref==3.11.1 # via # -r requirements/test.txt # django -babel==2.17.0 +babel==2.18.0 # via # pydata-sphinx-theme # sphinx -backports-tarfile==1.2.0 - # via jaraco-context beautifulsoup4==4.14.3 # via pydata-sphinx-theme -certifi==2026.1.4 +certifi==2026.2.25 # via requests cffi==2.0.0 # via cryptography -charset-normalizer==3.4.4 +charset-normalizer==3.4.5 # via requests -coverage[toml]==7.13.2 +coverage[toml]==7.13.4 # via # -r requirements/test.txt # pytest-cov -cryptography==46.0.4 +cryptography==46.0.5 # via secretstorage -django==5.2.10 +django==5.2.12 # via # -c requirements/common_constraints.txt # -r requirements/test.txt @@ -51,16 +49,14 @@ docutils==0.21.2 # readme-renderer # restructuredtext-lint # sphinx -drf-yasg==1.21.14 +drf-yasg==1.21.15 # via -r requirements/test.txt -id==1.5.0 +id==1.6.1 # via twine idna==3.11 # via requests -imagesize==1.4.1 +imagesize==2.0.0 # via sphinx -importlib-metadata==8.7.1 - # via keyring inflection==0.5.1 # via # -r requirements/test.txt @@ -93,7 +89,7 @@ more-itertools==10.8.0 # via # jaraco-classes # jaraco-functools -nh3==0.3.2 +nh3==0.3.3 # via readme-renderer packaging==26.0 # via @@ -129,9 +125,9 @@ pytest==9.0.2 # pytest-django pytest-cov==7.0.0 # via -r requirements/test.txt -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.txt -pytz==2025.2 +pytz==2026.1.post1 # via # -r requirements/test.txt # drf-yasg @@ -145,7 +141,6 @@ readme-renderer==44.0 # twine requests==2.32.5 # via - # id # requests-toolbelt # sphinx # twine @@ -155,7 +150,7 @@ restructuredtext-lint==2.0.2 # via doc8 rfc3986==2.0.0 # via twine -rich==14.3.1 +rich==14.3.3 # via twine roman-numerals==4.1.0 # via sphinx @@ -165,7 +160,7 @@ snowballstemmer==3.0.1 # via sphinx soupsieve==2.8.3 # via beautifulsoup4 -sphinx==9.0.4 +sphinx==9.1.0 # via # -r requirements/doc.in # pydata-sphinx-theme @@ -188,7 +183,7 @@ sqlparse==0.5.5 # via # -r requirements/test.txt # django -stevedore==5.6.0 +stevedore==5.7.0 # via doc8 twine==6.2.0 # via -r requirements/doc.in @@ -202,11 +197,10 @@ uritemplate==4.2.0 # drf-yasg urllib3==2.6.3 # via + # id # requests # twine -zipp==3.23.0 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==80.10.2 +setuptools==82.0.0 # via -r requirements/test.txt diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 29a9eb3..d89516b 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade @@ -12,7 +12,7 @@ packaging==26.0 # via # build # wheel -pip-tools==7.5.2 +pip-tools==7.5.3 # via -r requirements/pip-tools.in pyproject-hooks==1.2.0 # via diff --git a/requirements/pip.txt b/requirements/pip.txt index 9fbfa81..084d708 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade @@ -10,7 +10,7 @@ wheel==0.46.3 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==25.3 +pip==26.0.1 # via -r requirements/pip.in -setuptools==80.10.2 +setuptools==82.0.0 # via -r requirements/pip.in diff --git a/requirements/quality.txt b/requirements/quality.txt index cf1bbff..88649d7 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -1,24 +1,22 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -asgiref==3.11.0 +asgiref==3.11.1 # via # -r requirements/test.txt # django -astroid==4.0.3 +astroid==4.0.4 # via # pylint # pylint-celery -backports-tarfile==1.2.0 - # via jaraco-context -certifi==2026.1.4 +certifi==2026.2.25 # via requests cffi==2.0.0 # via cryptography -charset-normalizer==3.4.4 +charset-normalizer==3.4.5 # via requests click==8.3.1 # via @@ -27,17 +25,17 @@ click==8.3.1 # edx-lint click-log==0.4.0 # via edx-lint -code-annotations==2.3.0 +code-annotations==2.3.2 # via edx-lint -coverage[toml]==7.13.2 +coverage[toml]==7.13.4 # via # -r requirements/test.txt # pytest-cov -cryptography==46.0.4 +cryptography==46.0.5 # via secretstorage dill==0.4.1 # via pylint -django==5.2.10 +django==5.2.12 # via # -c requirements/common_constraints.txt # -r requirements/test.txt @@ -49,16 +47,14 @@ djangorestframework==3.16.1 # drf-yasg docutils==0.22.4 # via readme-renderer -drf-yasg==1.21.14 +drf-yasg==1.21.15 # via -r requirements/test.txt edx-lint==5.6.0 # via -r requirements/quality.in -id==1.5.0 +id==1.6.1 # via twine idna==3.11 # via requests -importlib-metadata==8.7.1 - # via keyring inflection==0.5.1 # via # -r requirements/test.txt @@ -67,7 +63,7 @@ iniconfig==2.3.0 # via # -r requirements/test.txt # pytest -isort==7.0.0 +isort==8.0.1 # via # -r requirements/quality.in # pylint @@ -97,7 +93,7 @@ more-itertools==10.8.0 # via # jaraco-classes # jaraco-functools -nh3==0.3.2 +nh3==0.3.3 # via readme-renderer packaging==26.0 # via @@ -105,7 +101,7 @@ packaging==26.0 # drf-yasg # pytest # twine -platformdirs==4.5.1 +platformdirs==4.9.4 # via pylint pluggy==1.6.0 # via @@ -124,7 +120,7 @@ pygments==2.19.2 # pytest # readme-renderer # rich -pylint==4.0.4 +pylint==4.0.5 # via # edx-lint # pylint-celery @@ -145,11 +141,11 @@ pytest==9.0.2 # pytest-django pytest-cov==7.0.0 # via -r requirements/test.txt -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.txt python-slugify==8.0.4 # via code-annotations -pytz==2025.2 +pytz==2026.1.post1 # via # -r requirements/test.txt # drf-yasg @@ -162,14 +158,13 @@ readme-renderer==44.0 # via twine requests==2.32.5 # via - # id # requests-toolbelt # twine requests-toolbelt==1.0.0 # via twine rfc3986==2.0.0 # via twine -rich==14.3.1 +rich==14.3.3 # via twine secretstorage==3.5.0 # via keyring @@ -181,7 +176,7 @@ sqlparse==0.5.5 # via # -r requirements/test.txt # django -stevedore==5.6.0 +stevedore==5.7.0 # via code-annotations text-unidecode==1.3 # via python-slugify @@ -195,11 +190,10 @@ uritemplate==4.2.0 # drf-yasg urllib3==2.6.3 # via + # id # requests # twine -zipp==3.23.0 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -setuptools==80.10.2 +setuptools==82.0.0 # via -r requirements/test.txt diff --git a/requirements/test.txt b/requirements/test.txt index 4292ea4..3e2ec70 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,14 +1,14 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # make upgrade # -asgiref==3.11.0 +asgiref==3.11.1 # via # -r requirements/base.txt # django -coverage[toml]==7.13.2 +coverage[toml]==7.13.4 # via pytest-cov # via # -c requirements/common_constraints.txt @@ -18,7 +18,7 @@ coverage[toml]==7.13.2 # via # -r requirements/base.txt # drf-yasg -drf-yasg==1.21.14 +drf-yasg==1.21.15 # via -r requirements/base.txt inflection==0.5.1 # via @@ -43,9 +43,9 @@ pytest==9.0.2 # pytest-django pytest-cov==7.0.0 # via -r requirements/test.in -pytest-django==4.11.1 +pytest-django==4.12.0 # via -r requirements/test.in -pytz==2025.2 +pytz==2026.1.post1 # via # -r requirements/base.txt # drf-yasg @@ -63,5 +63,5 @@ uritemplate==4.2.0 # drf-yasg # The following packages are considered to be unsafe in a requirements file: -setuptools==80.10.2 +setuptools==82.0.0 # via -r requirements/base.txt From b16d15acaacaf0d0ccf8b42c45d57b0a81614365 Mon Sep 17 00:00:00 2001 From: Feanil Patel Date: Fri, 6 Mar 2026 14:10:02 -0500 Subject: [PATCH 3/3] chore: bump version to 3.0.0 Co-Authored-By: Claude Sonnet 4.6 --- edx_api_doc_tools/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edx_api_doc_tools/__init__.py b/edx_api_doc_tools/__init__.py index edd0b3a..0f05b79 100644 --- a/edx_api_doc_tools/__init__.py +++ b/edx_api_doc_tools/__init__.py @@ -46,4 +46,4 @@ ) -__version__ = "2.1.2" +__version__ = "3.0.0"