diff --git a/ptvp35/__init__.py b/ptvp35/__init__.py index 9de0da0..15342c6 100644 --- a/ptvp35/__init__.py +++ b/ptvp35/__init__.py @@ -6,9 +6,10 @@ import os import pathlib import threading import warnings +from collections.abc import Hashable from functools import wraps from io import StringIO, UnsupportedOperation -from typing import IO, Any, Callable, Hashable, TypeVar +from typing import IO, Any, Callable, TypeVar __all__ = ( 'KVFactory', @@ -140,16 +141,15 @@ class KVJson(KVFactory): def _load_key(self, key: Any, /) -> Hashable: """note: unstable signature.""" - if isinstance(key, Hashable): - return key - elif isinstance(key, list): - return tuple(map(self._load_key, key)) - elif isinstance(key, dict): - return tuple((self._load_key(k), self._load_key(v)) for k, v in key.items()) - else: - raise TypeError( - 'unknown KVJson key type, cannot convert to hashable' - ) + match key: + case Hashable(): + return key + case list(): + return tuple(map(self._load_key, key)) + case dict(): + return tuple((self._load_key(k), self._load_key(v)) for k, v in key.items()) + case _: + raise TypeError('unknown KVJson key type, cannot convert to hashable') def fromline(self, line: str, /) -> tuple[Any, Any]: d = json.loads(line) @@ -207,7 +207,8 @@ def nightly(decorated: TDecoratedNightly = None, prefix: str = '', stacklevel=2) decorated.__init_subclass__, prefix, stacklevel=3 ) return decorated # type: ignore - assert callable(decorated) + if not callable(decorated): + raise TypeError message = f"{prefix}{decorated.__name__}" @@ -470,13 +471,14 @@ class DbConnection(VirtualConnection): await self._reload() async def _handle_request(self, request: Request, /) -> None: - if isinstance(request, LineRequest): - await self._write(request.line, request) - elif isinstance(request, CommitRequest): - await self._commit_buffer() - request.set_result(None) - else: - raise UnknownRequestType + match request: + case LineRequest(): + await self._write(request.line, request) + case CommitRequest(): + await self._commit_buffer() + request.set_result(None) + case _: + raise UnknownRequestType async def _background_cycle(self, /) -> None: request: Request = await self.__queue.get() @@ -588,7 +590,8 @@ intended for heavy tasks.""" self._start_task() async def _initialize(self, /) -> None: - assert self.__not_running + if not self.__not_running: + raise RuntimeError self.__not_running = False await self._initialize_running() @@ -604,7 +607,8 @@ note: unstable signature.""" await self._commit_buffer() if not self.__buffer_future.done(): self.__buffer_future.set_exception(RequestToClosedConnection()) - assert isinstance(self.__buffer_future.exception(), RequestToClosedConnection) + if not isinstance(self.__buffer_future.exception(), RequestToClosedConnection): + raise RuntimeError del self.__buffer_requested del self.__buffer_future del self.__buffer @@ -614,7 +618,8 @@ note: unstable signature.""" await self.__queue.join() self.__task.cancel() del self.__task - assert self.__queue.empty() + if not self.__queue.empty(): + raise RuntimeError del self.__queue await self._close_buffer() @@ -971,7 +976,8 @@ class Transaction: self.__running = False def __enter__(self) -> TransactionView: - assert not self.__running + if self.__running: + raise RuntimeError self.__running = True self.__view = TransactionView({}, self.__connection) return self.__view