From c700ac66f1adddb38511bbb7cdb3d672795e8454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simen=20Heggest=C3=B8yl?= Date: Wed, 21 Jan 2026 14:40:27 +0100 Subject: [PATCH] Add support for Python 3.14 Also drop support for Python 3.9, which reached its end of life on 2025-10-31. --- .github/workflows/continous-integration.yml | 4 +-- CHANGELOG.md | 6 +++++ mypy.ini | 1 + okdata/sdk/data/download.py | 1 - pyproject.toml | 2 +- requirements.txt | 30 ++++++++++----------- setup.py | 4 +-- tests/auth/client_credentials_test_utils.py | 1 - tests/data/upload_test.py | 1 - tox.ini | 6 ++--- 10 files changed, 30 insertions(+), 26 deletions(-) diff --git a/.github/workflows/continous-integration.yml b/.github/workflows/continous-integration.yml index e509e07..4288b38 100644 --- a/.github/workflows/continous-integration.yml +++ b/.github/workflows/continous-integration.yml @@ -11,11 +11,11 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python: ['3.9', '3.10', '3.11', '3.12', '3.13'] + python: ['3.10', '3.11', '3.12', '3.13', '3.14'] steps: - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Set up Python ${{ matrix.python }} - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 + uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0 with: python-version: ${{ matrix.python }} - name: Install dependencies diff --git a/CHANGELOG.md b/CHANGELOG.md index f69455c..72f86db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## ?.?.? - Unreleased + +* Added support for Python 3.14. +* Dropped support for Python 3.9 which has reached end of life. Python 3.10+ is + now required. + ## 3.4.0 - 2025-09-08 * Fixed binary file downloads. diff --git a/mypy.ini b/mypy.ini index b6e6035..35b19df 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,2 +1,3 @@ [mypy] namespace_packages = True +ignore_missing_imports = True diff --git a/okdata/sdk/data/download.py b/okdata/sdk/data/download.py index 5dc8662..d62bc20 100644 --- a/okdata/sdk/data/download.py +++ b/okdata/sdk/data/download.py @@ -4,7 +4,6 @@ from okdata.sdk import SDK from okdata.sdk.io_utils import write_file_content - log = logging.getLogger() diff --git a/pyproject.toml b/pyproject.toml index 5843d7c..aff244d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.black] -target-version = ["py39", "py310", "py311", "py312", "py313"] +target-version = ["py310", "py311", "py312", "py313", "py314"] # Keep exclude in sync with flake8 config in tox.ini exclude = ''' /( diff --git a/requirements.txt b/requirements.txt index ded5a07..f13a0bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,53 +1,53 @@ # -# This file is autogenerated by pip-compile with Python 3.13 +# This file is autogenerated by pip-compile with Python 3.14 # by the following command: # # pip-compile # -attrs==24.2.0 +attrs==25.4.0 # via # jsonschema # referencing -certifi==2024.8.30 +certifi==2026.1.4 # via requests -cffi==1.17.1 +cffi==2.0.0 # via cryptography -charset-normalizer==3.4.0 +charset-normalizer==3.4.4 # via requests -cryptography==44.0.1 +cryptography==46.0.3 # via jwcrypto deprecation==2.1.0 # via python-keycloak -idna==3.10 +idna==3.11 # via requests -jsonschema==4.23.0 +jsonschema==4.26.0 # via okdata-sdk (setup.py) -jsonschema-specifications==2024.10.1 +jsonschema-specifications==2025.9.1 # via jsonschema jwcrypto==1.5.6 # via python-keycloak -packaging==24.1 +packaging==25.0 # via deprecation -pycparser==2.22 +pycparser==2.23 # via cffi python-keycloak==3.12.0 # via okdata-sdk (setup.py) -referencing==0.35.1 +referencing==0.37.0 # via # jsonschema # jsonschema-specifications -requests==2.32.4 +requests==2.32.5 # via # okdata-sdk (setup.py) # python-keycloak # requests-toolbelt requests-toolbelt==1.0.0 # via python-keycloak -rpds-py==0.20.0 +rpds-py==0.30.0 # via # jsonschema # referencing -typing-extensions==4.12.2 +typing-extensions==4.15.0 # via jwcrypto urllib3==2.6.3 # via diff --git a/setup.py b/setup.py index 6c87409..f2d9be1 100644 --- a/setup.py +++ b/setup.py @@ -39,14 +39,14 @@ include_package_data=True, classifiers=[ "Development Status :: 5 - Production/Stable", - "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", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], - python_requires=">=3.9", + python_requires=">=3.10", zip_safe=False, ) diff --git a/tests/auth/client_credentials_test_utils.py b/tests/auth/client_credentials_test_utils.py index 461ec40..5a9cce0 100644 --- a/tests/auth/client_credentials_test_utils.py +++ b/tests/auth/client_credentials_test_utils.py @@ -2,7 +2,6 @@ from datetime import datetime from dateutil import parser - utc_now = parser.parse("2019-11-01T10:00:30+00:00") not_expired_time = parser.parse("2019-11-01T10:00:41+00:00") expired_time = parser.parse("2019-11-01T10:00:39+00:00") diff --git a/tests/data/upload_test.py b/tests/data/upload_test.py index 95c6c1d..3fbcd0c 100644 --- a/tests/data/upload_test.py +++ b/tests/data/upload_test.py @@ -8,7 +8,6 @@ from okdata.sdk.file_cache import FileCache from tests.auth.client_credentials_test_utils import default_test_client_credentials - config = Config() file_cache = FileCache(config) file_cache.credentials_cache_enabled = False diff --git a/tox.ini b/tox.ini index f8d7ee0..bf4de3e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py39,py310,py311,py312,py313,flake8,black,mypy +envlist = py310,py311,py312,py313,py314,flake8,black,mypy [testenv] deps= @@ -33,8 +33,8 @@ commands = [testenv:mypy] skip_install = true deps = - mypy==0.991 - types-requests==2.25.12 + mypy + types-requests -rrequirements.txt commands = mypy -p okdata