diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 0572e1d58e..99e1832624 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -29,13 +29,15 @@ jobs: fail-fast: false matrix: java-version: [8] - python-version: ["3.11", "3.12", "3.13"] + python-version: ["3.11", "3.12", "3.13", "3.14"] event_loop_manager: ["libev", "asyncio", "asyncore"] exclude: - python-version: "3.12" event_loop_manager: "asyncore" - python-version: "3.13" event_loop_manager: "asyncore" + - python-version: "3.14" + event_loop_manager: "asyncore" steps: - uses: actions/checkout@v5 diff --git a/README.rst b/README.rst index e71af2f47b..84ceb443a3 100644 --- a/README.rst +++ b/README.rst @@ -20,7 +20,7 @@ Scylla Enterprise (2018.1.x+) using exclusively Cassandra's binary protocol and .. image:: https://github.com/scylladb/python-driver/actions/workflows/integration-tests.yml/badge.svg?branch=master :target: https://github.com/scylladb/python-driver/actions/workflows/integration-tests.yml?query=event%3Apush+branch%3Amaster -The driver supports Python versions 3.10-3.13. +The driver supports Python versions 3.10-3.14. .. **Note:** This driver does not support big-endian systems. diff --git a/docs/index.rst b/docs/index.rst index 3192a17102..cd137917d9 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -4,7 +4,7 @@ A Python client driver for `Scylla `_. This driver works exclusively with the Cassandra Query Language v3 (CQL3) and Cassandra's native protocol. -The driver supports Python 3.10-3.13. +The driver supports Python 3.10-3.14. This driver is open source under the `Apache v2 License `_. diff --git a/docs/installation.rst b/docs/installation.rst index 41cd374c7d..abfe4eea0a 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -3,7 +3,7 @@ Installation Supported Platforms ------------------- -Python versions 3.10-3.13 are supported. Both CPython (the standard Python +Python versions 3.10-3.14 are supported. Both CPython (the standard Python implementation) and `PyPy `_ are supported and tested. Linux, OSX, and Windows are supported. diff --git a/pyproject.toml b/pyproject.toml index 6f4e4a8f6e..3faf21c350 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,6 +13,7 @@ classifiers = [ 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Software Development :: Libraries :: Python Modules', diff --git a/tests/integration/cqlengine/test_timestamp.py b/tests/integration/cqlengine/test_timestamp.py index 1b0e3d6b9d..4e691803b6 100644 --- a/tests/integration/cqlengine/test_timestamp.py +++ b/tests/integration/cqlengine/test_timestamp.py @@ -47,7 +47,7 @@ def test_batch_is_included(self): with BatchQuery(timestamp=timedelta(seconds=30)) as b: TestTimestampModel.batch(b).create(count=1) - "USING TIMESTAMP".should.be.within(m.call_args[0][0].query_string) + m.call_args[0][0].query_string.should.match("USING TIMESTAMP") class CreateWithTimestampTest(BaseTimestampTest): @@ -66,7 +66,7 @@ def test_timestamp_not_included_on_normal_create(self): with mock.patch.object(self.session, "execute") as m: TestTimestampModel.create(count=2) - "USING TIMESTAMP".shouldnt.be.within(m.call_args[0][0].query_string) + m.call_args[0][0].query_string.shouldnt.match("USING TIMESTAMP") def test_timestamp_is_set_on_model_queryset(self): delta = timedelta(seconds=30) @@ -86,9 +86,7 @@ def test_non_batch_syntax_unit(self): with mock.patch.object(self.session, "execute") as m: TestTimestampModel.timestamp(timedelta(seconds=30)).create(count=1) - query = m.call_args[0][0].query_string - - "USING TIMESTAMP".should.be.within(query) + m.call_args[0][0].query_string.should.match("USING TIMESTAMP") def test_non_batch_syntax_with_ttl_unit(self): @@ -111,16 +109,14 @@ def test_instance_update_includes_timestamp_in_query(self): with mock.patch.object(self.session, "execute") as m: self.instance.timestamp(timedelta(seconds=30)).update(count=2) - - "USING TIMESTAMP".should.be.within(m.call_args[0][0].query_string) + m.call_args[0][0].query_string.should.match("USING TIMESTAMP") def test_instance_update_in_batch(self): with mock.patch.object(self.session, "execute") as m: with BatchQuery() as b: self.instance.batch(b).timestamp(timedelta(seconds=30)).update(count=2) - query = m.call_args[0][0].query_string - "USING TIMESTAMP".should.be.within(query) + m.call_args[0][0].query_string.should.match("USING TIMESTAMP") class DeleteWithTimestampTest(BaseTimestampTest):