diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 013fd348..c3deae50 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -135,6 +135,13 @@ Bug fixes behavior, where ``None`` values have always been supported to represent NULL values. +Python Version Support +~~~~~~~~~~~~~~~~~~~~~~ + +* Added support for Python 3.14 on all platforms and 3.14t (free threaded) on + all platforms except Windows. +* Dropped support for Python 3.9 (end of life). + 4.0.0 (2025-10-17) ------------------ diff --git a/ci/pip_install_deps.py b/ci/pip_install_deps.py index 2d35ddc9..b3168dae 100644 --- a/ci/pip_install_deps.py +++ b/ci/pip_install_deps.py @@ -88,12 +88,17 @@ def main(args): is_64bits = sys.maxsize > 2 ** 32 is_cpython = platform.python_implementation() == 'CPython' is_final = sys.version_info.releaselevel == 'final' + py_version = (sys.version_info.major, sys.version_info.minor) if on_linux_is_glibc and is_64bits and is_cpython and is_final: # Ensure that we've managed to install the expected dependencies. import pandas import numpy import pyarrow - import fastparquet + + # Temporarily don't require fastparquet on 3.14 + # Compat will still be tested on older releases. + if py_version < (3, 14): + import fastparquet if __name__ == "__main__": diff --git a/ci/run_tests_pipeline.yaml b/ci/run_tests_pipeline.yaml index 96b2134b..27c8e0df 100644 --- a/ci/run_tests_pipeline.yaml +++ b/ci/run_tests_pipeline.yaml @@ -82,17 +82,17 @@ stages: submodules: true - task: UsePythonVersion@0 inputs: - versionSpec: "3.9" + versionSpec: "3.10" - script: | python3 --version python3 -m pip install uv sudo apt-get install -y libopenblas-dev pkg-config displayName: "Install uv" - - script: uv run --with 'numpy==1.21.0' test/test.py -v TestBufferProtocolVersionV2 + - script: uv run --python python --with 'numpy==1.21.0' test/test.py -v TestBufferProtocolVersionV2 displayName: "Test vs numpy 1.21" - - script: uv run --with 'numpy==1.24.0' test/test.py -v TestBufferProtocolVersionV2 + - script: uv run --python python --with 'numpy==1.24.0' test/test.py -v TestBufferProtocolVersionV2 displayName: "Test vs numpy 1.24" - - script: uv run --with 'numpy==1.26.0' test/test.py -v TestBufferProtocolVersionV2 + - script: uv run --python python --with 'numpy==1.26.0' test/test.py -v TestBufferProtocolVersionV2 displayName: "Test vs numpy 1.26" - job: TestsAgainstVariousNumpyVersion2x pool: @@ -112,9 +112,9 @@ stages: python3 -m pip install uv sudo apt-get install -y libopenblas-dev pkg-config displayName: "Install uv" - - script: uv run --with 'numpy==2.0.0' test/test.py -v TestBufferProtocolVersionV2 + - script: uv run --python python --with 'numpy==2.0.0' test/test.py -v TestBufferProtocolVersionV2 displayName: "Test vs numpy 2.0" - - script: uv run --with 'numpy==2.2.0' test/test.py -v TestBufferProtocolVersionV2 + - script: uv run --python python --with 'numpy==2.2.0' test/test.py -v TestBufferProtocolVersionV2 displayName: "Test vs numpy 2.2" - - script: uv run --with 'numpy==2.3.0' test/test.py -v TestBufferProtocolVersionV2 + - script: uv run --python python --with 'numpy==2.3.0' test/test.py -v TestBufferProtocolVersionV2 displayName: "Test vs numpy 2.3" diff --git a/pyproject.toml b/pyproject.toml index ff4377ea..48d8f427 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] # See: https://packaging.python.org/en/latest/specifications/declaring-project-metadata/ name = "questdb" -requires-python = ">=3.9" +requires-python = ">=3.10" version = "4.1.0" description = "QuestDB client library for Python" readme = "README.rst" @@ -66,9 +66,9 @@ skip = [ # Those builds are named `*win32*` in cibuildwheel. "*i686*", - # Skip Python 3.14 builds until the dependencies catch up - "cp314-*", - "cp314t-*" + # Temporarily skip the 3.14 free-threaded built on Windows. + # Pandas dependencies missing. + "*314t-win*" ] # [tool.cibuildwheel.windows] diff --git a/test/test.py b/test/test.py index 095b70f7..f32c5034 100755 --- a/test/test.py +++ b/test/test.py @@ -1478,6 +1478,11 @@ class TestBufferProtocolVersionV2(TestBases.TestBuffer): version = 2 +class TestBufferProtocolVersionV3(TestBases.TestBuffer): + name = 'protocol version 3' + version = 3 + + if __name__ == '__main__': if os.environ.get('TEST_QUESTDB_PROFILE') == '1': import cProfile