From 829fc003e5256a9aa23ad2a6b4835c0422c7cc56 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Fri, 23 Oct 2026 11:42:48 +0200 Subject: [PATCH 1/4] Update required python version, certifi used in dev-requirements to both fix and accommodate comprised ca issue downstream. --- .github/workflows/ci.yml | 2 +- ci/update_dependencies.sh | 2 +- dev-requirements.txt | 160 +++++++++++++++++++++++--------------- pyproject.toml | 5 +- 4 files changed, 102 insertions(+), 67 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3600bc8..316883c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: checks: strategy: matrix: - python: ["3.9", "3.10", "3.11", "3.12", "3.13"] + python: ["3.11", "3.12", "3.13", "3.14", "3.15"] uses: ./.github/workflows/check-python.yml with: python-version: ${{ matrix.python }} diff --git a/ci/update_dependencies.sh b/ci/update_dependencies.sh index 24ac2a8..85e81e3 100755 --- a/ci/update_dependencies.sh +++ b/ci/update_dependencies.sh @@ -1,4 +1,4 @@ #!/usr/bin/env sh . .venv/bin/activate -pip-compile --extra=ws --extra=development --extra=docs --extra=testing --output-file=./dev-requirements.txt pyproject.toml +pip-compile -U --extra=ws --extra=development --extra=docs --extra=testing --output-file=./dev-requirements.txt pyproject.toml diff --git a/dev-requirements.txt b/dev-requirements.txt index 5d6349b..46fe0f3 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -4,29 +4,31 @@ # # pip-compile --extra=development --extra=docs --extra=testing --extra=ws --output-file=./dev-requirements.txt pyproject.toml # -alabaster==0.7.13 +alabaster==0.7.16 # via sphinx annotated-types==0.7.0 # via pydantic -argcomplete==3.5.3 +argcomplete==3.7.0 # via datamodel-code-generator -astroid==3.2.4 +astroid==3.3.11 # via pylint -babel==2.17.0 +babel==2.18.0 # via sphinx -black==24.8.0 +black==25.11.0 # via datamodel-code-generator -build==1.2.2.post1 +build==1.4.4 # via pip-tools -cachetools==5.5.2 +cachetools==6.2.6 # via tox -certifi==2025.1.31 - # via requests +certifi==2026.10.19 + # via + # requests + # s2-python (pyproject.toml) cfgv==3.4.0 # via pre-commit chardet==5.2.0 # via tox -charset-normalizer==3.4.1 +charset-normalizer==3.5.2 # via requests click==8.1.8 # via @@ -34,65 +36,71 @@ click==8.1.8 # pip-tools colorama==0.4.6 # via tox -coverage[toml]==7.6.1 +coverage[toml]==7.10.7 # via pytest-cov -datamodel-code-generator==0.27.3 +datamodel-code-generator==0.45.0 # via s2-python (pyproject.toml) -dill==0.3.9 +dill==0.4.1 # via pylint -distlib==0.3.9 +distlib==0.4.4 # via virtualenv -docutils==0.20.1 +docutils==0.21.2 # via # sphinx # sphinx-rtd-theme # sphinx-tabs exceptiongroup==1.3.1 # via pytest -filelock==3.16.1 +filelock==3.19.1 # via + # python-discovery # tox # virtualenv -genson==1.3.0 +genson==1.3.1 # via datamodel-code-generator -identify==2.6.1 +identify==2.6.15 # via pre-commit -idna==3.10 +idna==3.20 # via requests -imagesize==1.4.1 +imagesize==1.5.0 # via sphinx importlib-metadata==8.7.1 # via # build - # setuptools-scm + # isort # sphinx -inflect==5.6.2 + # typeguard +inflect==7.5.0 # via datamodel-code-generator -iniconfig==2.0.0 +iniconfig==2.1.0 # via pytest -isort==5.13.2 +isort==6.1.0 # via # datamodel-code-generator # pylint -jinja2==3.1.5 +jinja2==3.1.6 # via # datamodel-code-generator # sphinx -markupsafe==2.1.5 +librt==0.16.0 + # via mypy +markupsafe==3.0.4 # via jinja2 mccabe==0.7.0 # via pylint -mypy==1.14.1 +more-itertools==10.8.0 + # via inflect +mypy==1.19.1 # via s2-python (pyproject.toml) -mypy-extensions==1.0.0 +mypy-extensions==1.1.0 # via # black # mypy -nodeenv==1.9.1 +nodeenv==1.11.0 # via # pre-commit # pyright -packaging==24.2 +packaging==26.3 # via # black # build @@ -102,48 +110,55 @@ packaging==24.2 # setuptools-scm # sphinx # tox -pathspec==0.12.1 - # via black -pip-tools==7.4.1 + # vcs-versioning + # virtualenv + # wheel +pathspec==1.1.1 + # via + # black + # mypy +pip-tools==7.6.2 # via s2-python (pyproject.toml) -platformdirs==4.3.6 +platformdirs==4.4.0 # via # black # pylint # tox # virtualenv -pluggy==1.5.0 +pluggy==1.6.0 # via # pytest + # pytest-cov # tox -pre-commit==3.5.0 +pre-commit==4.3.0 # via s2-python (pyproject.toml) -pydantic==2.10.6 +pydantic==2.13.5 # via # datamodel-code-generator # s2-python (pyproject.toml) -pydantic-core==2.27.2 +pydantic-core==2.46.5 # via pydantic -pygments==2.19.1 +pygments==2.21.0 # via + # pytest # sphinx # sphinx-tabs -pylint==3.2.7 +pylint==3.3.9 # via s2-python (pyproject.toml) -pyproject-api==1.8.0 +pyproject-api==1.9.1 # via tox -pyproject-hooks==1.2.0 +pyproject-hooks==1.3.3 # via # build # pip-tools -pyright==1.1.396 +pyright==1.1.414 # via s2-python (pyproject.toml) -pytest==8.3.5 +pytest==8.4.2 # via # pytest-cov # pytest-timer # s2-python (pyproject.toml) -pytest-cov==5.0.0 +pytest-cov==7.1.0 # via pytest-cover pytest-cover==3.0.0 # via pytest-coverage @@ -151,19 +166,23 @@ pytest-coverage==0.0 # via s2-python (pyproject.toml) pytest-timer==1.0.0 # via s2-python (pyproject.toml) -pyyaml==6.0.2 +python-discovery==1.6.4 + # via virtualenv +pytokens==0.4.1 + # via black +pyyaml==6.0.3 # via # datamodel-code-generator # pre-commit -requests==2.32.3 +requests==2.32.5 # via sphinx -setuptools-scm==8.3.1 +setuptools-scm==10.3.4 # via s2-python (pyproject.toml) six==1.17.0 # via sphinxcontrib-httpdomain -snowballstemmer==2.2.0 +snowballstemmer==3.1.1 # via sphinx -sphinx==7.1.2 +sphinx==7.4.7 # via # s2-python (pyproject.toml) # sphinx-copybutton @@ -176,27 +195,27 @@ sphinx-copybutton==0.5.2 # via s2-python (pyproject.toml) sphinx-fontawesome==0.0.6 # via s2-python (pyproject.toml) -sphinx-rtd-theme==3.0.2 +sphinx-rtd-theme==3.1.0 # via s2-python (pyproject.toml) sphinx-tabs==3.4.7 # via s2-python (pyproject.toml) -sphinxcontrib-applehelp==1.0.4 +sphinxcontrib-applehelp==2.0.0 # via sphinx -sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-devhelp==2.0.0 # via sphinx -sphinxcontrib-htmlhelp==2.0.1 +sphinxcontrib-htmlhelp==2.1.0 # via sphinx sphinxcontrib-httpdomain==1.8.1 # via s2-python (pyproject.toml) sphinxcontrib-jquery==4.1 # via sphinx-rtd-theme -sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-jsmath==2.0.0 # via sphinx -sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-qthelp==2.0.0 # via sphinx -sphinxcontrib-serializinghtml==1.1.5 +sphinxcontrib-serializinghtml==2.0.0 # via sphinx -tomli==2.2.1 +tomli==2.5.0 # via # black # build @@ -208,17 +227,22 @@ tomli==2.2.1 # pyproject-api # pytest # setuptools-scm + # sphinx # tox -tomlkit==0.13.2 + # vcs-versioning +tomlkit==0.15.2 # via pylint -tox==4.24.1 +tox==4.30.3 # via s2-python (pyproject.toml) -typing-extensions==4.12.2 +typeguard==4.5.2 + # via inflect +typing-extensions==4.16.0 # via # astroid # black # exceptiongroup # mypy + # pip-tools # pydantic # pydantic-core # pylint @@ -226,15 +250,23 @@ typing-extensions==4.12.2 # s2-python (pyproject.toml) # setuptools-scm # tox -urllib3==2.2.3 + # typeguard + # typing-inspection + # vcs-versioning + # virtualenv +typing-inspection==0.4.2 + # via pydantic +urllib3==2.6.3 # via requests -virtualenv==20.29.2 +vcs-versioning==2.6.0 + # via setuptools-scm +virtualenv==21.14.13 # via # pre-commit # tox websockets==13.1 # via s2-python (pyproject.toml) -wheel==0.45.1 +wheel==0.48.0 # via pip-tools zipp==3.23.1 # via importlib-metadata diff --git a/pyproject.toml b/pyproject.toml index 337dc2e..0ace458 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ dynamic = ["version"] readme = "README.rst" license = "Apache-2.0" license-files = ["LICENSE"] -requires-python = ">=3.9, < 3.14" +requires-python = ">=3.11, < 3.16" dependencies = [ "pydantic>=2.8.2", "typing-extensions", @@ -24,6 +24,8 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", ] [tool.setuptools_scm] @@ -51,6 +53,7 @@ development = [ "pre-commit", "tox", "setuptools_scm", + "certifi>=2026.10.19", ] docs = [ "sphinx", From 045697b6bf2822874fda7e248561a64023aa6189 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Fri, 23 Oct 2026 11:47:53 +0200 Subject: [PATCH 2/4] Dev environment should now use python3.11 --- ci/setup_dev_environment.sh | 2 +- dev-requirements.txt | 131 +++++++++++++++--------------------- 2 files changed, 54 insertions(+), 79 deletions(-) diff --git a/ci/setup_dev_environment.sh b/ci/setup_dev_environment.sh index 98afff7..0a640f9 100755 --- a/ci/setup_dev_environment.sh +++ b/ci/setup_dev_environment.sh @@ -1,5 +1,5 @@ #!/bin/bash -python3.9 -m venv ./.venv/ +python3.11 -m venv ./.venv/ . ./.venv/bin/activate pip install pip-tools diff --git a/dev-requirements.txt b/dev-requirements.txt index 46fe0f3..d2f839b 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -1,83 +1,77 @@ # -# This file is autogenerated by pip-compile with Python 3.9 +# This file is autogenerated by pip-compile with Python 3.11 # by the following command: # # pip-compile --extra=development --extra=docs --extra=testing --extra=ws --output-file=./dev-requirements.txt pyproject.toml # -alabaster==0.7.16 +alabaster==1.0.0 # via sphinx -annotated-types==0.7.0 +annotated-types==0.8.0 # via pydantic -argcomplete==3.7.0 +argcomplete==3.7.2 # via datamodel-code-generator -astroid==3.3.11 +ast-serialize==0.13.1 + # via mypy +astroid==4.3.4 # via pylint babel==2.18.0 # via sphinx -black==25.11.0 +black==26.10.1 # via datamodel-code-generator -build==1.4.4 +build==1.6.1 # via pip-tools -cachetools==6.2.6 +cachetools==7.2.4 # via tox certifi==2026.10.19 # via # requests # s2-python (pyproject.toml) -cfgv==3.4.0 +cfgv==3.5.0 # via pre-commit -chardet==5.2.0 - # via tox charset-normalizer==3.5.2 # via requests -click==8.1.8 +click==8.5.0 # via # black # pip-tools colorama==0.4.6 # via tox -coverage[toml]==7.10.7 +coverage[toml]==7.17.0 # via pytest-cov -datamodel-code-generator==0.45.0 +datamodel-code-generator==0.86.0 # via s2-python (pyproject.toml) dill==0.4.1 # via pylint distlib==0.4.4 # via virtualenv -docutils==0.21.2 +docutils==0.22.4 # via # sphinx # sphinx-rtd-theme # sphinx-tabs -exceptiongroup==1.3.1 - # via pytest -filelock==3.19.1 +filelock==4.2.4 # via # python-discovery # tox # virtualenv -genson==1.3.1 +genson==1.4.0 # via datamodel-code-generator -identify==2.6.15 +identify==2.6.20 # via pre-commit idna==3.20 # via requests -imagesize==1.5.0 +imagesize==2.0.1 # via sphinx -importlib-metadata==8.7.1 - # via - # build - # isort - # sphinx - # typeguard -inflect==7.5.0 +inflect==7.6.0 # via datamodel-code-generator -iniconfig==2.1.0 +iniconfig==2.3.1 # via pytest -isort==6.1.0 +isort==8.0.1 # via # datamodel-code-generator # pylint +jaraco-functools==4.6.0 + # via inflect jinja2==3.1.6 # via # datamodel-code-generator @@ -88,9 +82,11 @@ markupsafe==3.0.4 # via jinja2 mccabe==0.7.0 # via pylint -more-itertools==10.8.0 - # via inflect -mypy==1.19.1 +more-itertools==11.2.1 + # via + # inflect + # jaraco-functools +mypy==2.4.0 # via s2-python (pyproject.toml) mypy-extensions==1.1.0 # via @@ -104,7 +100,6 @@ packaging==26.3 # via # black # build - # datamodel-code-generator # pyproject-api # pytest # setuptools-scm @@ -119,33 +114,33 @@ pathspec==1.1.1 # mypy pip-tools==7.6.2 # via s2-python (pyproject.toml) -platformdirs==4.4.0 +platformdirs==4.13.5 # via # black # pylint # tox # virtualenv -pluggy==1.6.0 +pluggy==1.7.0 # via # pytest # pytest-cov # tox -pre-commit==4.3.0 +pre-commit==4.7.0 # via s2-python (pyproject.toml) -pydantic==2.13.5 +pydantic==2.14.1 # via # datamodel-code-generator # s2-python (pyproject.toml) -pydantic-core==2.46.5 +pydantic-core==2.50.1 # via pydantic pygments==2.21.0 # via # pytest # sphinx # sphinx-tabs -pylint==3.3.9 +pylint==4.1.3 # via s2-python (pyproject.toml) -pyproject-api==1.9.1 +pyproject-api==1.12.0 # via tox pyproject-hooks==1.3.3 # via @@ -153,7 +148,7 @@ pyproject-hooks==1.3.3 # pip-tools pyright==1.1.414 # via s2-python (pyproject.toml) -pytest==8.4.2 +pytest==9.1.1 # via # pytest-cov # pytest-timer @@ -167,22 +162,24 @@ pytest-coverage==0.0 pytest-timer==1.0.0 # via s2-python (pyproject.toml) python-discovery==1.6.4 - # via virtualenv + # via + # tox + # virtualenv pytokens==0.4.1 # via black pyyaml==6.0.3 # via # datamodel-code-generator # pre-commit -requests==2.32.5 +requests==2.34.2 + # via sphinx +roman-numerals==4.1.0 # via sphinx setuptools-scm==10.3.4 # via s2-python (pyproject.toml) -six==1.17.0 - # via sphinxcontrib-httpdomain snowballstemmer==3.1.1 # via sphinx -sphinx==7.4.7 +sphinx==9.0.4 # via # s2-python (pyproject.toml) # sphinx-copybutton @@ -197,7 +194,7 @@ sphinx-fontawesome==0.0.6 # via s2-python (pyproject.toml) sphinx-rtd-theme==3.1.0 # via s2-python (pyproject.toml) -sphinx-tabs==3.4.7 +sphinx-tabs==3.5.0 # via s2-python (pyproject.toml) sphinxcontrib-applehelp==2.0.0 # via sphinx @@ -205,7 +202,7 @@ sphinxcontrib-devhelp==2.0.0 # via sphinx sphinxcontrib-htmlhelp==2.1.0 # via sphinx -sphinxcontrib-httpdomain==1.8.1 +sphinxcontrib-httpdomain==2.2.1 # via s2-python (pyproject.toml) sphinxcontrib-jquery==4.1 # via sphinx-rtd-theme @@ -215,48 +212,28 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx -tomli==2.5.0 - # via - # black - # build - # coverage - # datamodel-code-generator - # mypy - # pip-tools - # pylint - # pyproject-api - # pytest - # setuptools-scm - # sphinx - # tox - # vcs-versioning +tomli-w==1.2.0 + # via tox tomlkit==0.15.2 # via pylint -tox==4.30.3 +tox==4.67.1 # via s2-python (pyproject.toml) -typeguard==4.5.2 +typeguard==4.6.0 # via inflect typing-extensions==4.16.0 # via - # astroid - # black - # exceptiongroup + # datamodel-code-generator # mypy - # pip-tools # pydantic # pydantic-core - # pylint # pyright # s2-python (pyproject.toml) - # setuptools-scm # tox # typeguard # typing-inspection - # vcs-versioning - # virtualenv -typing-inspection==0.4.2 +typing-inspection==0.4.4 # via pydantic -urllib3==2.6.3 +urllib3==2.8.0 # via requests vcs-versioning==2.6.0 # via setuptools-scm @@ -268,8 +245,6 @@ websockets==13.1 # via s2-python (pyproject.toml) wheel==0.48.0 # via pip-tools -zipp==3.23.1 - # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip From 7abca783203c93181f0c5214e1a5248c70605147 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Fri, 23 Oct 2026 11:54:28 +0200 Subject: [PATCH 3/4] New linting issues introduce through update. --- src/s2python/connection/async_/message_handlers.py | 3 ++- src/s2python/message.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/s2python/connection/async_/message_handlers.py b/src/s2python/connection/async_/message_handlers.py index f904a9d..01e7e54 100644 --- a/src/s2python/connection/async_/message_handlers.py +++ b/src/s2python/connection/async_/message_handlers.py @@ -89,7 +89,8 @@ async def handle_event( await handler(connection, event, send_okay.run) except PermanentConnectionError: logger.error( - "While processing message %s a permanent connection error occurred. Stopping the connection." + "While processing message %s a permanent connection error occurred. Stopping the connection.", + msg_event ) raise except Exception: diff --git a/src/s2python/message.py b/src/s2python/message.py index 0fca2be..539d347 100644 --- a/src/s2python/message.py +++ b/src/s2python/message.py @@ -78,7 +78,7 @@ Transition, ) -S2MessageWithID: TypeAlias = Union[ +S2MessageWithID: TypeAlias = Union[ # pylint: disable=invalid-name DDBCAverageDemandRateForecast, DDBCInstruction, DDBCSystemDescription, From a519875adeae3758b3456282c2795eccd8c77a16 Mon Sep 17 00:00:00 2001 From: Sebastiaan la Fleur Date: Fri, 23 Oct 2026 11:55:24 +0200 Subject: [PATCH 4/4] Add comment about why we require a minimum certifi version. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0ace458..dde2526 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,7 +53,7 @@ development = [ "pre-commit", "tox", "setuptools_scm", - "certifi>=2026.10.19", + "certifi>=2026.10.19", # Because of https://emudhra.we-have-a-problem.com/ ] docs = [ "sphinx",