Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,14 @@ jobs:
- name: "Linux"
runner: "ubuntu-latest"
cpythons:
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "3.14"
tox-post-environments:
- "py3.9-mindeps"
- "py3.9-orjson"
- "py3.10-mindeps"
- "py3.10-orjson"
- "py3.14-orjson"
- "py3.11-sphinxext"
- "doctest"
Expand All @@ -66,10 +65,10 @@ jobs:
- name: "Windows"
runner: "windows-latest"
cpythons:
- "3.9"
- "3.10"
- "3.11"
tox-post-environments:
- "py3.9-mindeps"
- "py3.10-mindeps"
- "py3.14-orjson"
- "py3.11-sphinxext"
- "doctest"
Expand All @@ -78,12 +77,12 @@ jobs:
- name: "Quality"
runner: "ubuntu-latest"
cpythons:
- "3.9"
- "3.10"
- "3.14"
tox-environments:
- "check-min-python-is-tested"
- "mypy-py3.14"
- "mypy-py3.9"
- "mypy-py3.10"
- "mypy-test"
- "mypy-docs"
- "poetry-check"
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ repos:
rev: v3.21.2
hooks:
- id: pyupgrade
args: ["--py39-plus"]
args: ["--py310-plus"]
- repo: https://github.com/psf/black-pre-commit-mirror
rev: 26.10.0
hooks:
Expand Down
4 changes: 4 additions & 0 deletions changelog.d/20260923_110938_sirosen_drop_py39.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Python Support
--------------

- Removed support for Python 3.9. (:pr:`NUMBER`)
12 changes: 3 additions & 9 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,15 @@ classifiers = [
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python",
"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",
]
requires-python = ">=3.9"
requires-python = ">=3.10"
dependencies = [
"requests>=2.19.1,<3.0.0",
"requests>=2.27.0,<3.0.0",
"pyjwt[crypto]>=2.0.0,<3.0.0",
# cryptography 3.4.0 is known-bugged, see:
# https://github.com/pyca/cryptography/issues/5756
Expand All @@ -34,8 +33,6 @@ dependencies = [
# depend on the latest version of typing-extensions on python versions which do
# not have all of the typing features we use
'typing_extensions>=4.0; python_version<"3.11"',
# python versions older than 3.9 don't have importlib.resources
'importlib_resources>=5.12.0; python_version<"3.9"',
]

[project.readme]
Expand Down Expand Up @@ -65,10 +62,7 @@ test = [
]
test-mindeps = [
{include-group = "test"},
# this version of requests is newer than the minimum in package data
# however, if we pin back to 2.19.1, we break 'responses' behaviors used by the
# testsuite
"requests==2.22.0",
"requests==2.27.0",
"pyjwt==2.0.0",
"cryptography==3.3.1",
"typing_extensions==4.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
#
# This file is autogenerated by pip-compile with Python 3.9
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# tox p -m freezedeps
#
certifi==2026.5.20
certifi==2026.7.22
# via requests
cffi==2.0.0
cffi==2.1.1
# via cryptography
chardet==3.0.4
charset-normalizer==2.0.12
# via requests
coverage==7.10.7
coverage==7.16.1
# via -r .test-mindeps.in
cryptography==3.3.1
# via -r .test-mindeps.in
Expand All @@ -20,34 +20,32 @@ execnet==2.1.2
# via pytest-xdist
flaky==3.8.1
# via -r .test-mindeps.in
idna==2.8
idna==3.20
# via requests
importlib-metadata==8.7.1
# via pytest-randomly
iniconfig==2.1.0
iniconfig==2.3.0
# via pytest
packaging==26.2
packaging==26.3
# via pytest
pluggy==1.6.0
# via pytest
pycparser==2.23
pycparser==3.0
# via cffi
pygments==2.20.0
pygments==2.21.0
# via pytest
pyjwt==2.0.0
# via -r .test-mindeps.in
pytest==8.4.2
pytest==9.1.1
# via
# -r .test-mindeps.in
# pytest-randomly
# pytest-xdist
pytest-randomly==4.0.1
pytest-randomly==5.0.0
# via -r .test-mindeps.in
pytest-xdist==3.8.0
# via -r .test-mindeps.in
pyyaml==6.0.3
# via responses
requests==2.22.0
requests==2.27.0
# via
# -r .test-mindeps.in
# responses
Expand All @@ -59,13 +57,11 @@ tomli==2.4.1
# via
# coverage
# pytest
types-pyyaml==6.0.12.20250915
types-pyyaml==6.0.12.20260906
# via responses
typing-extensions==4.0.0
# via -r .test-mindeps.in
urllib3==1.25.11
urllib3==1.26.20
# via
# requests
# responses
zipp==3.23.1
# via importlib-metadata
24 changes: 12 additions & 12 deletions requirements/py3.10/test-orjson.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,52 @@
#
# tox p -m freezedeps
#
certifi==2026.5.20
certifi==2026.7.22
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.5.1
# via requests
coverage==7.14.1
coverage==7.16.1
# via -r .test.in
exceptiongroup==1.3.1
# via pytest
execnet==2.1.2
# via pytest-xdist
flaky==3.8.1
# via -r .test.in
idna==3.16
idna==3.20
# via requests
iniconfig==2.3.0
# via pytest
orjson==3.11.9
orjson==3.12.0
# via -r .orjson.in
packaging==26.2
packaging==26.3
# via pytest
pluggy==1.6.0
# via pytest
pygments==2.20.0
pygments==2.21.0
# via pytest
pytest==9.0.3
pytest==9.1.1
# via
# -r .test.in
# pytest-randomly
# pytest-xdist
pytest-randomly==4.1.0
pytest-randomly==5.0.0
# via -r .test.in
pytest-xdist==3.8.0
# via -r .test.in
pyyaml==6.0.3
# via responses
requests==2.34.2
# via responses
responses==0.26.1
responses==0.26.3
# via -r .test.in
tomli==2.4.1
# via
# coverage
# pytest
typing-extensions==4.15.0
typing-extensions==4.16.0
# via exceptiongroup
urllib3==2.7.0
urllib3==2.8.0
# via
# requests
# responses
22 changes: 11 additions & 11 deletions requirements/py3.10/test.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,50 +4,50 @@
#
# tox p -m freezedeps
#
certifi==2026.5.20
certifi==2026.7.22
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.5.1
# via requests
coverage==7.14.1
coverage==7.16.1
# via -r .test.in
exceptiongroup==1.3.1
# via pytest
execnet==2.1.2
# via pytest-xdist
flaky==3.8.1
# via -r .test.in
idna==3.16
idna==3.20
# via requests
iniconfig==2.3.0
# via pytest
packaging==26.2
packaging==26.3
# via pytest
pluggy==1.6.0
# via pytest
pygments==2.20.0
pygments==2.21.0
# via pytest
pytest==9.0.3
pytest==9.1.1
# via
# -r .test.in
# pytest-randomly
# pytest-xdist
pytest-randomly==4.1.0
pytest-randomly==5.0.0
# via -r .test.in
pytest-xdist==3.8.0
# via -r .test.in
pyyaml==6.0.3
# via responses
requests==2.34.2
# via responses
responses==0.26.1
responses==0.26.3
# via -r .test.in
tomli==2.4.1
# via
# coverage
# pytest
typing-extensions==4.15.0
typing-extensions==4.16.0
# via exceptiongroup
urllib3==2.7.0
urllib3==2.8.0
# via
# requests
# responses
32 changes: 16 additions & 16 deletions requirements/py3.10/typing.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,47 +6,47 @@
#
alabaster==1.0.0
# via sphinx
ast-serialize==0.5.0
ast-serialize==0.11.2
# via mypy
babel==2.18.0
# via sphinx
certifi==2026.5.20
certifi==2026.7.22
# via requests
charset-normalizer==3.4.7
charset-normalizer==3.5.1
# via requests
docutils==0.21.2
# via sphinx
idna==3.16
idna==3.20
# via requests
imagesize==2.0.0
imagesize==2.0.1
# via sphinx
jinja2==3.1.6
# via sphinx
librt==0.11.0
librt==0.15.0
# via mypy
markupsafe==3.0.3
# via jinja2
mypy==2.1.0
mypy==2.3.1
# via -r .typing.in
mypy-extensions==1.1.0
# via mypy
orjson==3.11.9
orjson==3.12.0
# via -r .typing.in
packaging==26.2
packaging==26.3
# via sphinx
pathspec==1.1.1
# via mypy
pygments==2.20.0
pygments==2.21.0
# via sphinx
pyyaml==6.0.3
# via responses
requests==2.34.2
# via
# responses
# sphinx
responses==0.26.1
responses==0.26.3
# via -r .typing.in
snowballstemmer==3.1.0
snowballstemmer==3.1.1
# via sphinx
sphinx==8.1.3
# via -r .typing.in
Expand All @@ -68,17 +68,17 @@ tomli==2.4.1
# sphinx
types-cryptography==3.3.23.2
# via types-jwt
types-docutils==0.22.3.20260518
types-docutils==0.23.0.20260923
# via -r .typing.in
types-jwt==0.1.3
# via -r .typing.in
types-requests==2.33.0.20260518
types-requests==2.33.0.20260906
# via -r .typing.in
typing-extensions==4.15.0
typing-extensions==4.16.0
# via
# -r .typing.in
# mypy
urllib3==2.7.0
urllib3==2.8.0
# via
# requests
# responses
Expand Down
Loading
Loading