| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- """不连数据库的连接替身。"""
- class FakeCursor:
- """记录语句,并按连接上的标志返回只读探针结果。"""
- def __init__(self, connection: "FakeConnection") -> None:
- self._connection = connection
- async def __aenter__(self) -> "FakeCursor":
- return self
- async def __aexit__(self, exc_type: object, exc: object, tb: object) -> bool:
- return False
- async def execute(self, query: str, args: object = None) -> None:
- self._connection.statements.append(query)
- async def fetchall(self) -> list[tuple[object, ...]]:
- return [(self._connection.readonly_flag,)]
- @property
- def description(self) -> tuple[tuple[str], ...]:
- return (("value",),)
- class FakeConnection:
- """业务连接或自有库连接的替身。"""
- def __init__(self, readonly_flag: object = 1) -> None:
- self.readonly_flag = readonly_flag
- self.statements: list[str] = []
- self.cursor_calls = 0
- self.closed = False
- def cursor(self) -> FakeCursor:
- self.cursor_calls += 1
- return FakeCursor(self)
- async def ensure_closed(self) -> None:
- self.closed = True
- class RejectingConnection:
- """游标一旦创建就失败,用来证明语句没有发给驱动。"""
- def __init__(self) -> None:
- self.cursor_calls = 0
- def cursor(self) -> FakeCursor:
- self.cursor_calls += 1
- raise AssertionError("不应向数据库发送语句")
|