Skip to content

setup.py: bump PyJWT floor to >=2.11.0 to match the actual runtime requirement#577

Merged
vimalloc merged 1 commit into
vimalloc:mainfrom
potiuk:bump-pyjwt-floor
May 13, 2026
Merged

setup.py: bump PyJWT floor to >=2.11.0 to match the actual runtime requirement#577
vimalloc merged 1 commit into
vimalloc:mainfrom
potiuk:bump-pyjwt-floor

Conversation

@potiuk
Copy link
Copy Markdown
Contributor

@potiuk potiuk commented May 13, 2026

Hi! flask_jwt_extended/tokens.py does:

from jwt.types import Options

…and jwt.types.Options was first added in PyJWT 2.11.0 (released 2026-01-30). The current install_requires in setup.py declares PyJWT>=2.0,<3.0, which is wide enough for resolvers to land on PyJWT 2.10.x and earlier — those installs then fail at import flask_jwt_extended time with:

ImportError: cannot import name 'Options' from 'jwt.types'

PR #574 (commit 9bf8d35, "Bump PyJWT to 2.12.1") already bumped the dev requirements.txt to PyJWT 2.12.1, but the package's own install_requires floor was left at >=2.0. This bridges that gap so downstream consumers (e.g. flask-appbuilder, apache-airflow) can rely on pip install flask-jwt-extended resulting in a working import without having to add their own defensive PyJWT pin.

Same class of issue as #553 — a runtime import that requires a newer PyJWT than the declared floor admits.

The upper bound (<3.0) is unchanged.

I'm happy to add a CHANGELOG entry / open a release-note PR separately if helpful.


Drafted-by: Claude Opus 4.7 (1M context); reviewed by @potiuk before posting

…quirement

flask_jwt_extended/tokens.py does:

    from jwt.types import Options

…and jwt.types.Options was first added in PyJWT 2.11.0 (2026-01-30).
The current install_requires in setup.py declares PyJWT>=2.0,<3.0,
which is wide enough for resolvers to land on PyJWT 2.10.x and earlier
— those installs then fail at import time with:

    ImportError: cannot import name 'Options' from 'jwt.types'

PR vimalloc#574 (commit 9bf8d35, 'Bump PyJWT to 2.12.1') already bumped the
dev requirements.txt to PyJWT 2.12.1, but the package's own
install_requires floor was left at >=2.0. This change bridges that
gap so downstream consumers (e.g. flask-appbuilder, apache-airflow)
can rely on pip install flask-jwt-extended resulting in a working
import without having to add their own defensive PyJWT pin.

Same class of issue as vimalloc#553 — a runtime import that requires a newer
PyJWT than the declared floor admits.

The upper bound (<3.0) is unchanged.
@vimalloc
Copy link
Copy Markdown
Owner

This options stuff is the change that just keeps on giving! Thanks for the PR!

@vimalloc vimalloc merged commit a049882 into vimalloc:main May 13, 2026
14 checks passed
@vimalloc
Copy link
Copy Markdown
Owner

I'll get a new version cut here this morning.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants