From dcda4ad2df080242f84e9b6a63c15fe1d50c34a0 Mon Sep 17 00:00:00 2001 From: Peter Doggart Date: Tue, 14 Apr 2026 15:13:43 +0000 Subject: [PATCH 1/6] Drop Python 3.9; add 3.13/3.14 and PyPy CI/tox coverage - Require Python 3.10+; update classifiers, docs, and bumpr test env - Expand GitHub Actions matrix (CPython, PyPy) and Flask exclusions - Update tox for Flask 2/3 factors, PyPy envs with tox-only rpds pins - Refresh test deps (pytest stack, twine) for newer interpreters - Fix field tests for Python 3.14 partial/class attribute behavior - Document changes under CHANGELOG 1.3.3 Made-with: Cursor --- .github/workflows/release.yml | 8 ++++---- .github/workflows/test.yml | 11 ++++++++--- CHANGELOG.rst | 22 ++++++++++++++++++++++ README.rst | 2 +- bumpr.rc | 2 +- doc/index.rst | 2 +- doc/installation.rst | 2 +- requirements/test.pip | 9 ++++----- setup.py | 5 +++-- tests/test_fields.py | 8 ++++---- tox.ini | 21 ++++++++++++++++++--- 11 files changed, 67 insertions(+), 25 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 168ed583..dca30509 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,12 +7,12 @@ jobs: build: runs-on: ubuntu-latest steps: - - name: Set up Python 3.9 - uses: actions/setup-python@v1 + - name: Set up Python 3.10 + uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: "3.10" - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Install dependencies run: | python -m pip install --upgrade pip diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fedc0ca0..3e91ab00 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,8 +15,13 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.9", "3.10", "3.11", "pypy3.9", "3.12"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "pypy3.10", "pypy3.11"] flask: ["<3.0.0", ">=3.0.0"] + exclude: + - python-version: "3.13" + flask: "<3.0.0" + - python-version: "3.14" + flask: "<3.0.0" steps: - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 @@ -41,10 +46,10 @@ jobs: runs-on: ubuntu-latest if: github.event_name == 'pull_request' steps: - - name: Set up Python 3.9 + - name: Set up Python 3.12 uses: actions/setup-python@v4 with: - python-version: "3.9" + python-version: "3.12" - name: Checkout ${{ github.base_ref }} uses: actions/checkout@v3 with: diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7e36709d..e8e4069b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -25,6 +25,28 @@ Releases prior to 0.3.0 were “best effort” filled out, but are missing some info. If you see your contribution missing info, please open a PR on the Changelog! +.. _section-1.3.3: +1.3.3 +----- +.. _enhancements-1.3.3 +Enhancements +~~~~~~~~~~~~ + +:: + + * Drop support for Python 3.9 (EOL); require Python 3.10 or newer. [python-restx] + * Declare and test support for Python 3.13 and 3.14 (CPython). [python-restx] + * Expand GitHub Actions and tox coverage: PyPy 3.10 and 3.11 with both Flask 2.x and Flask 3.x; exclude Flask 2 on 3.13/3.14 where unsupported. [python-restx] + * Refresh test and release tooling (pytest, pytest-benchmark, pytest-profiling, twine) for newer interpreters; PyPy test envs use tox-only dependency pins where needed. [python-restx] + +.. _bug_fixes-1.3.3 +Bug Fixes +~~~~~~~~~ + +:: + + * Adjust field tests for Python 3.14 (``staticmethod`` around ``functools.partial`` used as a class attribute). [python-restx] + .. _section-1.3.1: 1.3.1 ----- diff --git a/README.rst b/README.rst index 39bbac5f..0a68b497 100644 --- a/README.rst +++ b/README.rst @@ -38,7 +38,7 @@ and expose its documentation properly using `Swagger`_. Compatibility ============= -Flask-RESTX requires Python 3.9+. +Flask-RESTX requires Python 3.10+. On Flask Compatibility ====================== diff --git a/bumpr.rc b/bumpr.rc index 337c662b..3b025ee4 100644 --- a/bumpr.rc +++ b/bumpr.rc @@ -4,7 +4,7 @@ vcs = git commit = true tag = true push = true -tests = tox -e py39 +tests = tox -e py310 clean = inv clean files = diff --git a/doc/index.rst b/doc/index.rst index cacdb53b..649aadc9 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -33,7 +33,7 @@ development and to support our users. Compatibility ============= -Flask-RESTX requires Python 3.9+. +Flask-RESTX requires Python 3.10+. Installation diff --git a/doc/installation.rst b/doc/installation.rst index c4c34604..9934494d 100644 --- a/doc/installation.rst +++ b/doc/installation.rst @@ -20,5 +20,5 @@ The development version can be downloaded from pip install -e .[dev,test] -Flask-RESTX requires Python version 3.9+. +Flask-RESTX requires Python version 3.10+. It's also working with PyPy and PyPy3. diff --git a/requirements/test.pip b/requirements/test.pip index 6ce09332..eaf63676 100644 --- a/requirements/test.pip +++ b/requirements/test.pip @@ -1,13 +1,12 @@ blinker Faker==2.0.0 mock==3.0.5 -pytest==7.0.1 -pytest-benchmark==3.4.1 +pytest==8.4.2 +pytest-benchmark==5.2.3 pytest-cov==4.0.0 pytest-flask==1.3.0 pytest-mock==3.6.1 -pytest-profiling==1.7.0 +pytest-profiling==1.8.1 invoke==2.2.0 -twine==3.8.0 +twine==6.2.0;platform_python_implementation!="PyPy" setuptools -backports.zoneinfo;python_version<"3.9" diff --git a/setup.py b/setup.py index eed17d83..335c55f7 100644 --- a/setup.py +++ b/setup.py @@ -102,13 +102,14 @@ def pip(filename): "Topic :: System :: Software Distribution", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules", "License :: OSI Approved :: BSD License", ], - python_requires=">=3.9", + python_requires=">=3.10", ) diff --git a/tests/test_fields.py b/tests/test_fields.py index 9f255c5c..b57f83c6 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -693,7 +693,7 @@ def test_unsupported_value_format(self): class FormatedStringFieldTest(StringTestMixin, BaseFieldTestMixin, FieldTestCase): - field_class = partial(fields.FormattedString, "Hello {name}") + field_class = staticmethod(partial(fields.FormattedString, "Hello {name}")) def test_defaults(self): field = fields.FormattedString("Hello {name}") @@ -731,7 +731,7 @@ def test_tuple(self): class UrlFieldTest(StringTestMixin, BaseFieldTestMixin, FieldTestCase): - field_class = partial(fields.Url, "endpoint") + field_class = staticmethod(partial(fields.Url, "endpoint")) def test_defaults(self): field = fields.Url("endpoint") @@ -931,7 +931,7 @@ def test_as_list_is_reusable(self, api): class ListFieldTest(BaseFieldTestMixin, FieldTestCase): - field_class = partial(fields.List, fields.String) + field_class = staticmethod(partial(fields.List, fields.String)) def test_defaults(self): field = fields.List(fields.String) @@ -1025,7 +1025,7 @@ def test_list_of_raw(self): class WildcardFieldTest(BaseFieldTestMixin, FieldTestCase): - field_class = partial(fields.Wildcard, fields.String) + field_class = staticmethod(partial(fields.Wildcard, fields.String)) def test_types(self): with pytest.raises(fields.MarshallingError): diff --git a/tox.ini b/tox.ini index 3ac33e79..40bad0ca 100644 --- a/tox.ini +++ b/tox.ini @@ -5,9 +5,12 @@ [tox] envlist = - py{39, 310, 311}-flask2, - py{311, 312}-flask3 - pypy3.9 + py{310, 311, 312}-flask2, + py{311, 312, 313, 314}-flask3 + pypy3.10-flask2 + pypy3.10-flask3 + pypy3.11-flask2 + pypy3.11-flask3 doc [testenv] @@ -18,6 +21,18 @@ deps = -r{toxinidir}/requirements/test.pip -r{toxinidir}/requirements/develop.pip +[testenv:pypy3.10-flask{2,3}] +deps = + {[testenv]deps} + rpds-py<0.28 +commands = {posargs:inv test} + +[testenv:pypy3.11-flask{2,3}] +deps = + {[testenv]deps} + rpds-py<0.30 +commands = {posargs:inv test} + [testenv:doc] changedir = doc deps = .[doc] From 0caa3b3988a01974fbb2afd2cdd78183247c04f0 Mon Sep 17 00:00:00 2001 From: Peter Doggart Date: Tue, 14 Apr 2026 15:16:21 +0000 Subject: [PATCH 2/6] Black format files. --- flask_restx/fields.py | 5 ++--- flask_restx/model.py | 1 - flask_restx/utils.py | 1 - tests/test_postman.py | 1 - tests/test_swagger.py | 18 ++++++------------ 5 files changed, 8 insertions(+), 18 deletions(-) diff --git a/flask_restx/fields.py b/flask_restx/fields.py index 4484ef51..9bbb9c79 100644 --- a/flask_restx/fields.py +++ b/flask_restx/fields.py @@ -22,7 +22,6 @@ from .marshalling import marshal from .utils import camel_to_dash, not_none - __all__ = ( "Raw", "String", @@ -880,10 +879,10 @@ def output(self, key, obj, ordered=False): # complexity to O(n) if ordered: # Get first element if respecting order - (objkey, val) = self._flat.pop(0) + objkey, val = self._flat.pop(0) else: # Previous default retained - (objkey, val) = self._flat.pop() + objkey, val = self._flat.pop() if ( objkey not in self._cache and objkey not in self.exclude diff --git a/flask_restx/model.py b/flask_restx/model.py index b72496cf..f8bcd87e 100644 --- a/flask_restx/model.py +++ b/flask_restx/model.py @@ -17,7 +17,6 @@ from .utils import not_none from ._http import HTTPStatus - RE_REQUIRED = re.compile(r"u?\'(?P.*)\' is a required property", re.I | re.U) diff --git a/flask_restx/utils.py b/flask_restx/utils.py index 409657aa..16a194fd 100644 --- a/flask_restx/utils.py +++ b/flask_restx/utils.py @@ -7,7 +7,6 @@ from ._http import HTTPStatus - FIRST_CAP_RE = re.compile("(.)([A-Z][a-z]+)") ALL_CAP_RE = re.compile("([a-z0-9])([A-Z])") diff --git a/tests/test_postman.py b/tests/test_postman.py index 0317bf64..85c91628 100644 --- a/tests/test_postman.py +++ b/tests/test_postman.py @@ -9,7 +9,6 @@ from urllib.parse import parse_qs, urlparse - with open(join(dirname(__file__), "postman-v1.schema.json")) as f: schema = json.load(f) diff --git a/tests/test_swagger.py b/tests/test_swagger.py index 8f181505..c4a5ca7b 100644 --- a/tests/test_swagger.py +++ b/tests/test_swagger.py @@ -1451,23 +1451,17 @@ def get(self): description = lambda m: data["paths"]["/description/"][m]["description"] # noqa - assert description("get") == dedent( - """\ + assert description("get") == dedent("""\ Parent description. - Some details""" - ) + Some details""") - assert description("post") == dedent( - """\ + assert description("post") == dedent("""\ Parent description. - Extra description""" - ) + Extra description""") - assert description("delete") == dedent( - """\ + assert description("delete") == dedent("""\ Parent description. - A delete operation""" - ) + A delete operation""") assert description("put") == "Parent description." assert "description" not in data["paths"]["/descriptionless/"]["get"] From 7836c284038ce997650d0c338bd0c14b805ff053 Mon Sep 17 00:00:00 2001 From: Peter Doggart Date: Tue, 14 Apr 2026 15:21:21 +0000 Subject: [PATCH 3/6] Fix CI: pin rpds-py for PyPy in test extras GitHub Actions installs .[test], not tox-only pins. Newer rpds-py builds with maturin/PyO3 and rejects PyPy 3.10. Add PEP 508 markers in requirements/test.pip so PyPy resolves wheel versions; drop redundant tox deps overrides. Made-with: Cursor --- CHANGELOG.rst | 2 +- requirements/test.pip | 4 ++++ tox.ini | 6 ------ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e8e4069b..60700437 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -37,7 +37,7 @@ Enhancements * Drop support for Python 3.9 (EOL); require Python 3.10 or newer. [python-restx] * Declare and test support for Python 3.13 and 3.14 (CPython). [python-restx] * Expand GitHub Actions and tox coverage: PyPy 3.10 and 3.11 with both Flask 2.x and Flask 3.x; exclude Flask 2 on 3.13/3.14 where unsupported. [python-restx] - * Refresh test and release tooling (pytest, pytest-benchmark, pytest-profiling, twine) for newer interpreters; PyPy test envs use tox-only dependency pins where needed. [python-restx] + * Refresh test and release tooling (pytest, pytest-benchmark, pytest-profiling, twine) for newer interpreters; constrain transitive ``rpds-py`` on PyPy via test extras so CI and tox resolve installable wheels. [python-restx] .. _bug_fixes-1.3.3 Bug Fixes diff --git a/requirements/test.pip b/requirements/test.pip index eaf63676..b0c63626 100644 --- a/requirements/test.pip +++ b/requirements/test.pip @@ -10,3 +10,7 @@ pytest-profiling==1.8.1 invoke==2.2.0 twine==6.2.0;platform_python_implementation!="PyPy" setuptools +# PyPy + jsonschema/referencing: keep rpds-py on versions that publish wheels. Newer +# rpds-py sdists need maturin/PyO3 (PyPy 3.11+ only), which breaks CI on PyPy 3.10. +rpds-py<0.28;platform_python_implementation=="PyPy" and python_version<"3.11" +rpds-py<0.30;platform_python_implementation=="PyPy" and python_version>="3.11" diff --git a/tox.ini b/tox.ini index 40bad0ca..3c493a95 100644 --- a/tox.ini +++ b/tox.ini @@ -22,15 +22,9 @@ deps = -r{toxinidir}/requirements/develop.pip [testenv:pypy3.10-flask{2,3}] -deps = - {[testenv]deps} - rpds-py<0.28 commands = {posargs:inv test} [testenv:pypy3.11-flask{2,3}] -deps = - {[testenv]deps} - rpds-py<0.30 commands = {posargs:inv test} [testenv:doc] From 62e98649e5d3b65014d6134f7171dd19f721514e Mon Sep 17 00:00:00 2001 From: Peter Doggart Date: Tue, 14 Apr 2026 15:27:37 +0000 Subject: [PATCH 4/6] Simplify PyPy CI: move pins to workflow, trim test.pip - test.pip: drop rpds/readme markers; keep one twine line for PyPy 3.10 only - GHA: pre-install rpds-py (and readme-renderer for PyPy 3.11) before .[test] - tox: restore rpds-py caps on PyPy envs for local runs - CHANGELOG: describe workflow + tox split Made-with: Cursor --- .github/workflows/test.yml | 13 ++++++++++++- CHANGELOG.rst | 2 +- requirements/test.pip | 7 ++----- tox.ini | 6 ++++++ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3e91ab00..1dabe4d6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,10 +33,21 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip + # PyPy: pin rpds-py before resolving jsonschema/referencing so pip picks manylinux wheels + # (sdists use maturin; builds are fragile on PyPy). CPython does not need this. + case "${{ matrix.python-version }}" in + pypy3.10) pip install 'rpds-py<0.28' ;; + pypy3.11) pip install 'rpds-py<0.30' 'readme-renderer>=35,<42' ;; + esac pip install "flask${{ matrix.flask }}" pip install ".[test]" - name: Test with inv - run: inv cover qa + run: | + if [ "${{ matrix.python-version }}" = "pypy3.10" ]; then + inv cover + else + inv cover qa + fi - name: Codecov uses: codecov/codecov-action@v1 with: diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 60700437..8a4128b3 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -37,7 +37,7 @@ Enhancements * Drop support for Python 3.9 (EOL); require Python 3.10 or newer. [python-restx] * Declare and test support for Python 3.13 and 3.14 (CPython). [python-restx] * Expand GitHub Actions and tox coverage: PyPy 3.10 and 3.11 with both Flask 2.x and Flask 3.x; exclude Flask 2 on 3.13/3.14 where unsupported. [python-restx] - * Refresh test and release tooling (pytest, pytest-benchmark, pytest-profiling, twine) for newer interpreters; constrain transitive ``rpds-py`` on PyPy via test extras so CI and tox resolve installable wheels. [python-restx] + * Refresh test and release tooling (pytest, pytest-benchmark, pytest-profiling, twine) for newer interpreters; GitHub Actions pre-installs compatible ``rpds-py`` (and ``readme-renderer`` for PyPy 3.11 + Twine) for PyPy jobs; tox pins ``rpds-py`` for local PyPy envs. [python-restx] .. _bug_fixes-1.3.3 Bug Fixes diff --git a/requirements/test.pip b/requirements/test.pip index b0c63626..de00d470 100644 --- a/requirements/test.pip +++ b/requirements/test.pip @@ -8,9 +8,6 @@ pytest-flask==1.3.0 pytest-mock==3.6.1 pytest-profiling==1.8.1 invoke==2.2.0 -twine==6.2.0;platform_python_implementation!="PyPy" +# Omit on PyPy 3.10 only: Twine pulls keyring/SecretStorage/cryptography without usable wheels there. +twine==6.2.0;platform_python_implementation!="PyPy" or python_version>="3.11" setuptools -# PyPy + jsonschema/referencing: keep rpds-py on versions that publish wheels. Newer -# rpds-py sdists need maturin/PyO3 (PyPy 3.11+ only), which breaks CI on PyPy 3.10. -rpds-py<0.28;platform_python_implementation=="PyPy" and python_version<"3.11" -rpds-py<0.30;platform_python_implementation=="PyPy" and python_version>="3.11" diff --git a/tox.ini b/tox.ini index 3c493a95..40bad0ca 100644 --- a/tox.ini +++ b/tox.ini @@ -22,9 +22,15 @@ deps = -r{toxinidir}/requirements/develop.pip [testenv:pypy3.10-flask{2,3}] +deps = + {[testenv]deps} + rpds-py<0.28 commands = {posargs:inv test} [testenv:pypy3.11-flask{2,3}] +deps = + {[testenv]deps} + rpds-py<0.30 commands = {posargs:inv test} [testenv:doc] From eb41789e05b85df1b2e7be3b93f18622d1f8e44d Mon Sep 17 00:00:00 2001 From: Peter Doggart Date: Tue, 14 Apr 2026 15:29:46 +0000 Subject: [PATCH 5/6] Put twine back in test.pip without environment markers Remove duplicate twine from develop.pip and redundant CI pip install. Made-with: Cursor --- CHANGELOG.rst | 2 +- requirements/test.pip | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8a4128b3..38303d15 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -37,7 +37,7 @@ Enhancements * Drop support for Python 3.9 (EOL); require Python 3.10 or newer. [python-restx] * Declare and test support for Python 3.13 and 3.14 (CPython). [python-restx] * Expand GitHub Actions and tox coverage: PyPy 3.10 and 3.11 with both Flask 2.x and Flask 3.x; exclude Flask 2 on 3.13/3.14 where unsupported. [python-restx] - * Refresh test and release tooling (pytest, pytest-benchmark, pytest-profiling, twine) for newer interpreters; GitHub Actions pre-installs compatible ``rpds-py`` (and ``readme-renderer`` for PyPy 3.11 + Twine) for PyPy jobs; tox pins ``rpds-py`` for local PyPy envs. [python-restx] + * Refresh test and release tooling (pytest, pytest-benchmark, pytest-profiling, twine) for newer interpreters. GitHub Actions pre-installs compatible ``rpds-py`` (and ``readme-renderer`` for PyPy 3.11) for PyPy jobs; tox pins ``rpds-py`` for local PyPy envs. [python-restx] .. _bug_fixes-1.3.3 Bug Fixes diff --git a/requirements/test.pip b/requirements/test.pip index de00d470..9d709f71 100644 --- a/requirements/test.pip +++ b/requirements/test.pip @@ -8,6 +8,5 @@ pytest-flask==1.3.0 pytest-mock==3.6.1 pytest-profiling==1.8.1 invoke==2.2.0 -# Omit on PyPy 3.10 only: Twine pulls keyring/SecretStorage/cryptography without usable wheels there. -twine==6.2.0;platform_python_implementation!="PyPy" or python_version>="3.11" +twine==6.2.0 setuptools From 357b4b2091108dc78af81bbb4b29fc9f4a95dc23 Mon Sep 17 00:00:00 2001 From: Peter Doggart Date: Tue, 14 Apr 2026 15:33:13 +0000 Subject: [PATCH 6/6] Drop PyPy 3.10 from CI and tox; keep PyPy 3.11 only Made-with: Cursor --- .github/workflows/test.yml | 10 ++-------- CHANGELOG.rst | 2 +- tox.ini | 8 -------- 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1dabe4d6..61df37ea 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "pypy3.10", "pypy3.11"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "pypy3.11"] flask: ["<3.0.0", ">=3.0.0"] exclude: - python-version: "3.13" @@ -36,18 +36,12 @@ jobs: # PyPy: pin rpds-py before resolving jsonschema/referencing so pip picks manylinux wheels # (sdists use maturin; builds are fragile on PyPy). CPython does not need this. case "${{ matrix.python-version }}" in - pypy3.10) pip install 'rpds-py<0.28' ;; pypy3.11) pip install 'rpds-py<0.30' 'readme-renderer>=35,<42' ;; esac pip install "flask${{ matrix.flask }}" pip install ".[test]" - name: Test with inv - run: | - if [ "${{ matrix.python-version }}" = "pypy3.10" ]; then - inv cover - else - inv cover qa - fi + run: inv cover qa - name: Codecov uses: codecov/codecov-action@v1 with: diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 38303d15..ea0152da 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -36,7 +36,7 @@ Enhancements * Drop support for Python 3.9 (EOL); require Python 3.10 or newer. [python-restx] * Declare and test support for Python 3.13 and 3.14 (CPython). [python-restx] - * Expand GitHub Actions and tox coverage: PyPy 3.10 and 3.11 with both Flask 2.x and Flask 3.x; exclude Flask 2 on 3.13/3.14 where unsupported. [python-restx] + * Expand GitHub Actions and tox coverage: PyPy 3.11 with both Flask 2.x and Flask 3.x; exclude Flask 2 on 3.13/3.14 where unsupported. [python-restx] * Refresh test and release tooling (pytest, pytest-benchmark, pytest-profiling, twine) for newer interpreters. GitHub Actions pre-installs compatible ``rpds-py`` (and ``readme-renderer`` for PyPy 3.11) for PyPy jobs; tox pins ``rpds-py`` for local PyPy envs. [python-restx] .. _bug_fixes-1.3.3 diff --git a/tox.ini b/tox.ini index 40bad0ca..f28dd779 100644 --- a/tox.ini +++ b/tox.ini @@ -7,8 +7,6 @@ envlist = py{310, 311, 312}-flask2, py{311, 312, 313, 314}-flask3 - pypy3.10-flask2 - pypy3.10-flask3 pypy3.11-flask2 pypy3.11-flask3 doc @@ -21,12 +19,6 @@ deps = -r{toxinidir}/requirements/test.pip -r{toxinidir}/requirements/develop.pip -[testenv:pypy3.10-flask{2,3}] -deps = - {[testenv]deps} - rpds-py<0.28 -commands = {posargs:inv test} - [testenv:pypy3.11-flask{2,3}] deps = {[testenv]deps}