From 6babab8b732afe8963533566106ed8a7a6185368 Mon Sep 17 00:00:00 2001 From: Gracjan Sadowicz Date: Thu, 17 Sep 2026 12:10:20 +0200 Subject: [PATCH] RavenDB-27141 Catch NoLeaderException by type and release 7.2.6.post1 Client 7.2.6.post1 maps the server's NoLeaderException correctly, so the text fallback that stood in for it can go. --- ravendb_test_driver/raven_test_driver.py | 8 ++------ setup.py | 4 ++-- tests/test_error_handling.py | 13 +++---------- 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/ravendb_test_driver/raven_test_driver.py b/ravendb_test_driver/raven_test_driver.py index 8ff3547..ee4191a 100644 --- a/ravendb_test_driver/raven_test_driver.py +++ b/ravendb_test_driver/raven_test_driver.py @@ -22,7 +22,7 @@ GetIndexErrorsOperation, ) from ravendb.documents.indexes.definitions import IndexState -from ravendb.exceptions.cluster import NoLoaderException +from ravendb.exceptions.cluster import NoLeaderException from ravendb.exceptions.exceptions import ( DatabaseDoesNotExistException, TimeoutException, @@ -190,12 +190,8 @@ def _delete_test_database(store: DocumentStore, database_name: str) -> None: """Hard-delete a test database, ignoring the failures that are not the test's problem.""" try: store.maintenance.server.send(DeleteDatabaseOperation(database_name, True)) - except (DatabaseDoesNotExistException, NoLoaderException): + except (DatabaseDoesNotExistException, NoLeaderException): pass # already gone, or the cluster has no leader right now - except RavenException as e: - # The client maps NoLeaderException under a misspelled key, so it arrives untyped. - if "NoLeaderException" not in str(e): - raise @staticmethod def _database_stem(frame_name: str) -> Optional[str]: diff --git a/setup.py b/setup.py index 8d9344f..3ce912d 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name="ravendb-test-driver", packages=find_packages(exclude=["*.tests.*", "tests", "*.tests", "tests.*"]), - version="7.2.6", + version="7.2.6.post1", description="RavenDB package for writing integration tests against RavenDB server", long_description_content_type="text/markdown", long_description=open("README.md").read(), @@ -14,5 +14,5 @@ keywords=["ravendb", "nosql", "database", "test", "driver"], python_requires=">=3.10", license_files=["LICENSE"], - install_requires=["ravendb-embedded~=7.2.5", "ravendb~=7.2.6"], + install_requires=["ravendb-embedded~=7.2.5", "ravendb~=7.2.6.post1"], ) diff --git a/tests/test_error_handling.py b/tests/test_error_handling.py index f85fb8a..7dbdff5 100644 --- a/tests/test_error_handling.py +++ b/tests/test_error_handling.py @@ -11,7 +11,7 @@ from unittest.mock import patch from ravendb import Lazy -from ravendb.exceptions.cluster import NoLoaderException +from ravendb.exceptions.cluster import NoLeaderException from ravendb.exceptions.exceptions import DatabaseDoesNotExistException from ravendb.exceptions.raven_exceptions import RavenException from ravendb_embedded import ServerOptions @@ -42,15 +42,8 @@ def test_deletes_the_database_it_was_given(self): def test_a_database_that_is_already_gone_is_not_an_error(self): RavenTestDriver._delete_test_database(_StoreThatRaises(DatabaseDoesNotExistException("gone")), "test_1") - def test_a_typed_no_leader_failure_is_ignored(self): - RavenTestDriver._delete_test_database(_StoreThatRaises(NoLoaderException("no leader")), "test_1") - - def test_an_untyped_no_leader_failure_is_ignored(self): - # The client maps the server's NoLeaderException under a misspelled key, so today a real - # no-leader failure arrives as a plain RavenException carrying the name in its message. - error = RavenException("Raven.Client.Exceptions.Cluster.NoLeaderException: no leader elected") - - RavenTestDriver._delete_test_database(_StoreThatRaises(error), "test_1") + def test_a_no_leader_failure_is_ignored(self): + RavenTestDriver._delete_test_database(_StoreThatRaises(NoLeaderException("no leader")), "test_1") def test_any_other_failure_still_propagates(self): with self.assertRaises(RavenException):