Skip to content

Commit 282f2b4

Browse files
fix: rename ConnectionError to DqliteConnectionError
Avoids shadowing Python's builtin ConnectionError, which caused confusion in exception handlers and broke wildcard imports. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 8d1676b commit 282f2b4

7 files changed

Lines changed: 23 additions & 25 deletions

File tree

src/dqliteclient/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from dqliteclient.connection import DqliteConnection
55
from dqliteclient.exceptions import (
66
ClusterError,
7-
ConnectionError,
7+
DqliteConnectionError,
88
DqliteError,
99
OperationalError,
1010
ProtocolError,
@@ -21,7 +21,7 @@
2121
"NodeStore",
2222
"MemoryNodeStore",
2323
"DqliteError",
24-
"ConnectionError",
24+
"DqliteConnectionError",
2525
"ProtocolError",
2626
"ClusterError",
2727
"OperationalError",

src/dqliteclient/connection.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from contextlib import asynccontextmanager
66
from typing import Any
77

8-
from dqliteclient.exceptions import ConnectionError, OperationalError, ProtocolError
8+
from dqliteclient.exceptions import DqliteConnectionError, OperationalError, ProtocolError
99
from dqliteclient.protocol import DqliteProtocol
1010

1111

@@ -57,9 +57,9 @@ async def connect(self) -> None:
5757
timeout=self._timeout,
5858
)
5959
except TimeoutError as e:
60-
raise ConnectionError(f"Connection to {self._address} timed out") from e
60+
raise DqliteConnectionError(f"Connection to {self._address} timed out") from e
6161
except OSError as e:
62-
raise ConnectionError(f"Failed to connect to {self._address}: {e}") from e
62+
raise DqliteConnectionError(f"Failed to connect to {self._address}: {e}") from e
6363

6464
self._protocol = DqliteProtocol(reader, writer)
6565

@@ -89,7 +89,7 @@ async def __aexit__(self, *args: Any) -> None:
8989
def _ensure_connected(self) -> tuple[DqliteProtocol, int]:
9090
"""Ensure we're connected and return protocol and db_id."""
9191
if self._protocol is None or self._db_id is None:
92-
raise ConnectionError("Not connected")
92+
raise DqliteConnectionError("Not connected")
9393
return self._protocol, self._db_id
9494

9595
def _invalidate(self) -> None:
@@ -105,7 +105,7 @@ async def execute(self, sql: str, params: list[Any] | None = None) -> tuple[int,
105105
protocol, db_id = self._ensure_connected()
106106
try:
107107
return await protocol.exec_sql(db_id, sql, params)
108-
except (ConnectionError, ProtocolError):
108+
except (DqliteConnectionError, ProtocolError):
109109
self._invalidate()
110110
raise
111111

@@ -114,7 +114,7 @@ async def fetch(self, sql: str, params: list[Any] | None = None) -> list[dict[st
114114
protocol, db_id = self._ensure_connected()
115115
try:
116116
columns, rows = await protocol.query_sql(db_id, sql, params)
117-
except (ConnectionError, ProtocolError):
117+
except (DqliteConnectionError, ProtocolError):
118118
self._invalidate()
119119
raise
120120
return [dict(zip(columns, row, strict=True)) for row in rows]
@@ -124,7 +124,7 @@ async def fetchall(self, sql: str, params: list[Any] | None = None) -> list[list
124124
protocol, db_id = self._ensure_connected()
125125
try:
126126
_, rows = await protocol.query_sql(db_id, sql, params)
127-
except (ConnectionError, ProtocolError):
127+
except (DqliteConnectionError, ProtocolError):
128128
self._invalidate()
129129
raise
130130
return rows
@@ -139,7 +139,7 @@ async def fetchval(self, sql: str, params: list[Any] | None = None) -> Any:
139139
protocol, db_id = self._ensure_connected()
140140
try:
141141
_, rows = await protocol.query_sql(db_id, sql, params)
142-
except (ConnectionError, ProtocolError):
142+
except (DqliteConnectionError, ProtocolError):
143143
self._invalidate()
144144
raise
145145
if rows and rows[0]:

src/dqliteclient/exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class DqliteError(Exception):
77
pass
88

99

10-
class ConnectionError(DqliteError):
10+
class DqliteConnectionError(DqliteError):
1111
"""Error establishing or maintaining connection."""
1212

1313
pass

src/dqliteclient/pool.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from dqliteclient.cluster import ClusterClient
99
from dqliteclient.connection import DqliteConnection
10-
from dqliteclient.exceptions import ConnectionError
10+
from dqliteclient.exceptions import DqliteConnectionError
1111

1212

1313
class ConnectionPool:
@@ -59,7 +59,7 @@ async def _create_connection(self) -> DqliteConnection:
5959
async def acquire(self) -> AsyncIterator[DqliteConnection]:
6060
"""Acquire a connection from the pool."""
6161
if self._closed:
62-
raise ConnectionError("Pool is closed")
62+
raise DqliteConnectionError("Pool is closed")
6363

6464
conn: DqliteConnection | None = None
6565

src/dqliteclient/protocol.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import asyncio
44
from typing import Any
55

6-
from dqliteclient.exceptions import ConnectionError, OperationalError, ProtocolError
6+
from dqliteclient.exceptions import DqliteConnectionError, OperationalError, ProtocolError
77
from dqlitewire import MessageDecoder, MessageEncoder, ReadBuffer
88
from dqlitewire.messages import (
99
ClientRequest,
@@ -198,15 +198,15 @@ async def _read_continuation(self) -> RowsResponse:
198198
return result
199199
data = await self._reader.read(4096)
200200
if not data:
201-
raise ConnectionError("Connection closed by server")
201+
raise DqliteConnectionError("Connection closed by server")
202202
self._decoder.feed(data)
203203

204204
async def _read_response(self) -> Message:
205205
"""Read and decode the next response message."""
206206
while not self._decoder.has_message():
207207
data = await self._reader.read(4096)
208208
if not data:
209-
raise ConnectionError("Connection closed by server")
209+
raise DqliteConnectionError("Connection closed by server")
210210
self._decoder.feed(data)
211211

212212
message = self._decoder.decode()

tests/test_connection.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66

77
from dqliteclient.connection import DqliteConnection
8-
from dqliteclient.exceptions import ConnectionError
8+
from dqliteclient.exceptions import DqliteConnectionError
99

1010

1111
class TestDqliteConnection:
@@ -51,7 +51,7 @@ async def slow_connect(*args, **kwargs):
5151

5252
with (
5353
patch("asyncio.open_connection", side_effect=slow_connect),
54-
pytest.raises(ConnectionError, match="timed out"),
54+
pytest.raises(DqliteConnectionError, match="timed out"),
5555
):
5656
await conn.connect()
5757

@@ -63,7 +63,7 @@ async def test_connect_refused(self) -> None:
6363
"asyncio.open_connection",
6464
side_effect=OSError("Connection refused"),
6565
),
66-
pytest.raises(ConnectionError, match="Failed to connect"),
66+
pytest.raises(DqliteConnectionError, match="Failed to connect"),
6767
):
6868
await conn.connect()
6969

@@ -91,7 +91,7 @@ async def test_context_manager(self) -> None:
9191
async def test_execute_not_connected(self) -> None:
9292
conn = DqliteConnection("localhost:9001")
9393

94-
with pytest.raises(ConnectionError, match="Not connected"):
94+
with pytest.raises(DqliteConnectionError, match="Not connected"):
9595
await conn.execute("SELECT 1")
9696

9797
async def test_nested_transaction_raises(self) -> None:
@@ -132,7 +132,7 @@ async def mock_execute(sql: str, params=None):
132132
async def test_fetch_not_connected(self) -> None:
133133
conn = DqliteConnection("localhost:9001")
134134

135-
with pytest.raises(ConnectionError, match="Not connected"):
135+
with pytest.raises(DqliteConnectionError, match="Not connected"):
136136
await conn.fetch("SELECT 1")
137137

138138
async def test_transaction_rollback_failure_preserves_original_exception(self) -> None:
@@ -204,8 +204,6 @@ async def test_connection_invalidated_after_protocol_error(self) -> None:
204204
# Now make the reader return empty (connection closed)
205205
mock_reader.read.side_effect = [b""]
206206

207-
from dqliteclient.exceptions import ConnectionError as DqliteConnectionError
208-
209207
with pytest.raises(DqliteConnectionError):
210208
await conn.execute("SELECT 1")
211209

tests/test_pool.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import pytest
66

7-
from dqliteclient.exceptions import ConnectionError
7+
from dqliteclient.exceptions import DqliteConnectionError
88
from dqliteclient.pool import ConnectionPool
99

1010

@@ -28,7 +28,7 @@ async def test_acquire_when_closed(self) -> None:
2828
pool = ConnectionPool(["localhost:9001"])
2929
pool._closed = True
3030

31-
with pytest.raises(ConnectionError, match="Pool is closed"):
31+
with pytest.raises(DqliteConnectionError, match="Pool is closed"):
3232
async with pool.acquire():
3333
pass
3434

0 commit comments

Comments
 (0)