From 51098e7a19fccfadc68da727f22b578af28d3c66 Mon Sep 17 00:00:00 2001 From: mathisarends Date: Sat, 7 Nov 2026 11:05:58 +0100 Subject: [PATCH] refactor!: rename cdpify.exceptions to cdpify.error --- CHANGELOG.md | 5 +++++ README.md | 6 ++++++ cdpify/__init__.py | 6 +++--- cdpify/client.py | 2 +- cdpify/codec.py | 2 +- cdpify/{exceptions.py => error.py} | 0 cdpify/event_queue.py | 2 +- cdpify/events/subscription.py | 2 +- cdpify/executor.py | 2 +- cdpify/transports/websocket.py | 2 +- ...rs_and_exceptions.py => test_decorators_and_errors.py} | 8 ++++---- tests/test_event_subscription.py | 2 +- tests/test_websocket_client.py | 2 +- tests/test_websocket_transport.py | 2 +- 14 files changed, 27 insertions(+), 16 deletions(-) rename cdpify/{exceptions.py => error.py} (100%) rename tests/{test_decorators_and_exceptions.py => test_decorators_and_errors.py} (92%) diff --git a/CHANGELOG.md b/CHANGELOG.md index fedbc326..8b036621 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ Breaking changes are listed first in each release. ### Breaking changes +- Renamed the error module from `cdpify.exceptions` to `cdpify.error`. + Update imports such as `from cdpify.exceptions import CDPCommandError` to + `from cdpify.error import CDPCommandError`. The old module is removed; + error classes remain available from the root package (`from cdpify import + CDPCommandError`) with the same behavior and inheritance. - Optional `any` fields now default to `UNSET`, distinguishing omission from JSON `null`. For example, `CallArgument()` omits `value`, while `CallArgument(value=None)` sends `{"value": null}`. Ordinary optional scalar diff --git a/README.md b/README.md index 9a48075f..799a6a6b 100644 --- a/README.md +++ b/README.md @@ -411,6 +411,12 @@ than `FrameId("F1")`, and `isinstance(frame_id, str)` for a runtime check. ### When Chrome deviates from the spec +Library error classes are available from `cdpify.error` and the root package: + +```python +from cdpify.error import CDPCommandError, CDPDecodeError +``` + Missing required fields raise `CDPDecodeError` with `model_type`, `missing_fields` and the enclosing wire-field `path`. Unknown fields are ignored and future enum values remain supported. Decoding checks required field diff --git a/cdpify/__init__.py b/cdpify/__init__.py index f972a02e..ca008e0f 100644 --- a/cdpify/__init__.py +++ b/cdpify/__init__.py @@ -1,8 +1,6 @@ from .client import CdpClient from .codec import decode_cdp, encode_cdp -from .event_queue import OverflowPolicy -from .events import EventSubscription, ReceivedEvent -from .exceptions import ( +from .error import ( CDPCommandError, CDPConnectionError, CDPDecodeError, @@ -12,6 +10,8 @@ CDPTimeoutError, deprecated_exception, ) +from .event_queue import OverflowPolicy +from .events import EventSubscription, ReceivedEvent from .executor import CommandExecutor from .session import CdpSession from .transport import Transport, TransportEvent diff --git a/cdpify/client.py b/cdpify/client.py index 488f429f..bd9cfcae 100644 --- a/cdpify/client.py +++ b/cdpify/client.py @@ -3,10 +3,10 @@ from typing import Any, Literal, Self from cdpify.domains import DomainAccessors +from cdpify.error import CDPConnectionError from cdpify.event_queue import OverflowPolicy from cdpify.events import EventRouter, EventSubscription, ReceivedEvent from cdpify.events.source import EventSource -from cdpify.exceptions import CDPConnectionError from cdpify.executor import BoundCommandExecutor from cdpify.session import CdpSession from cdpify.transport import CallbackTransport, Transport, TransportEvent diff --git a/cdpify/codec.py b/cdpify/codec.py index d126ff02..7e4c7dbb 100644 --- a/cdpify/codec.py +++ b/cdpify/codec.py @@ -8,7 +8,7 @@ from types import UnionType from typing import Any, TypeAliasType, Union, get_args, get_origin, get_type_hints -from cdpify.exceptions import CDPDecodeError +from cdpify.error import CDPDecodeError from cdpify.unset import UNSET logger = logging.getLogger(__name__) diff --git a/cdpify/exceptions.py b/cdpify/error.py similarity index 100% rename from cdpify/exceptions.py rename to cdpify/error.py diff --git a/cdpify/event_queue.py b/cdpify/event_queue.py index 47bfec65..19c087a9 100644 --- a/cdpify/event_queue.py +++ b/cdpify/event_queue.py @@ -2,7 +2,7 @@ from collections import deque from typing import Literal -from cdpify.exceptions import CDPEventOverflowError +from cdpify.error import CDPEventOverflowError type OverflowPolicy = Literal["error", "drop_oldest"] diff --git a/cdpify/events/subscription.py b/cdpify/events/subscription.py index 22c0fb81..610ffb5e 100644 --- a/cdpify/events/subscription.py +++ b/cdpify/events/subscription.py @@ -3,8 +3,8 @@ from types import TracebackType from typing import Self +from cdpify.error import CDPEventOverflowError, CDPStreamClosedError from cdpify.event_queue import EventQueue -from cdpify.exceptions import CDPEventOverflowError, CDPStreamClosedError from cdpify.unset import UNSET, UnsetType from .dispatcher import RawCDPEvent diff --git a/cdpify/executor.py b/cdpify/executor.py index eb825a64..1f041829 100644 --- a/cdpify/executor.py +++ b/cdpify/executor.py @@ -2,7 +2,7 @@ from collections.abc import Awaitable from typing import Any, Protocol -from cdpify.exceptions import CDPTimeoutError +from cdpify.error import CDPTimeoutError from cdpify.transport import Transport from cdpify.unset import UNSET, UnsetType diff --git a/cdpify/transports/websocket.py b/cdpify/transports/websocket.py index 44ce5bf4..632e27f5 100644 --- a/cdpify/transports/websocket.py +++ b/cdpify/transports/websocket.py @@ -8,8 +8,8 @@ import websockets from websockets.asyncio.client import ClientConnection, connect +from cdpify.error import CDPCommandError, CDPConnectionError from cdpify.event_queue import EventQueue, OverflowPolicy -from cdpify.exceptions import CDPCommandError, CDPConnectionError from cdpify.executor import _with_timeout from cdpify.transport import EventHandler, TransportEvent diff --git a/tests/test_decorators_and_exceptions.py b/tests/test_decorators_and_errors.py similarity index 92% rename from tests/test_decorators_and_exceptions.py rename to tests/test_decorators_and_errors.py index 3bf76f4c..fe46eec9 100644 --- a/tests/test_decorators_and_exceptions.py +++ b/tests/test_decorators_and_errors.py @@ -3,8 +3,8 @@ import pytest import cdpify -from cdpify import exceptions -from cdpify.exceptions import CDPCommandError, CDPTimeoutError +from cdpify import error +from cdpify.error import CDPCommandError, CDPTimeoutError from cdpify.shared.decorators import _Deprecated, deprecated @@ -32,7 +32,7 @@ def test_timeout_error_is_builtin_timeout_error() -> None: assert issubclass(CDPTimeoutError, TimeoutError) -@pytest.mark.parametrize("module", [cdpify, exceptions]) +@pytest.mark.parametrize("module", [cdpify, error]) @pytest.mark.parametrize( ("old_name", "new_name"), [ @@ -48,7 +48,7 @@ def test_old_exception_names_are_deprecated_aliases( with pytest.deprecated_call(match=new_name): alias = getattr(module, old_name) - assert alias is getattr(exceptions, new_name) + assert alias is getattr(error, new_name) _IMPLEMENTATIONS = pytest.mark.parametrize( diff --git a/tests/test_event_subscription.py b/tests/test_event_subscription.py index ac2842a7..1efad300 100644 --- a/tests/test_event_subscription.py +++ b/tests/test_event_subscription.py @@ -9,8 +9,8 @@ import pytest from cdpify.codec import decode_cdp +from cdpify.error import CDPStreamClosedError from cdpify.events import EventRouter -from cdpify.exceptions import CDPStreamClosedError from cdpify.transport import TransportEvent diff --git a/tests/test_websocket_client.py b/tests/test_websocket_client.py index 734a1404..4b016243 100644 --- a/tests/test_websocket_client.py +++ b/tests/test_websocket_client.py @@ -9,7 +9,7 @@ from websockets.exceptions import ConnectionClosedOK from cdpify import CdpClient -from cdpify.exceptions import CDPConnectionError, CDPStreamClosedError +from cdpify.error import CDPConnectionError, CDPStreamClosedError from cdpify.transports import websocket as websocket_module diff --git a/tests/test_websocket_transport.py b/tests/test_websocket_transport.py index e113bd26..cf6cc91d 100644 --- a/tests/test_websocket_transport.py +++ b/tests/test_websocket_transport.py @@ -6,7 +6,7 @@ import pytest from websockets.exceptions import ConnectionClosedOK -from cdpify.exceptions import ( +from cdpify.error import ( CDPCommandError, CDPConnectionError, CDPTimeoutError,