diff --git a/derive_client/_clients/rest/async_http/client.py b/derive_client/_clients/rest/async_http/client.py index f56b74a4..22320a0d 100644 --- a/derive_client/_clients/rest/async_http/client.py +++ b/derive_client/_clients/rest/async_http/client.py @@ -167,6 +167,10 @@ async def _initialize_bridge(self) -> None: except BridgePrimarySignerRequiredError: raise NotConnectedError("Bridge unavailable: requires signer to be the LightAccount owner.") + @property + def logger(self) -> LoggerType: + return self._logger + @property def account(self) -> LightAccount: """Get the LightAccount instance (this is not a web3 contract instance).""" diff --git a/derive_client/_clients/rest/http/client.py b/derive_client/_clients/rest/http/client.py index e963d720..71ef6fb6 100644 --- a/derive_client/_clients/rest/http/client.py +++ b/derive_client/_clients/rest/http/client.py @@ -150,6 +150,10 @@ def _initialize_bridge(self) -> BridgeClient: except BridgePrimarySignerRequiredError: raise NotConnectedError("Bridge unavailable: requires signer to be the LightAccount owner.") + @property + def logger(self) -> LoggerType: + return self._logger + @property def account(self) -> LightAccount: """Get the LightAccount instance (this is not a web3 contract instance).""" diff --git a/derive_client/_clients/websockets/client.py b/derive_client/_clients/websockets/client.py index a5848c45..6bdd247b 100644 --- a/derive_client/_clients/websockets/client.py +++ b/derive_client/_clients/websockets/client.py @@ -1,11 +1,10 @@ """ -Synchronous WebSocket client for Derive. +Asynchronous WebSocket client for Derive. """ from __future__ import annotations import contextlib -from logging import Logger from pathlib import Path from textwrap import dedent from typing import Generator @@ -27,13 +26,13 @@ from derive_client._clients.websockets.api import PrivateAPI, PublicAPI from derive_client._clients.websockets.session import WebSocketSession from derive_client.config import CONFIGS -from derive_client.data_types import ChecksumAddress, Environment +from derive_client.data_types import ChecksumAddress, Environment, LoggerType from derive_client.data_types.generated_models import PublicLoginParamsSchema from derive_client.utils.logger import get_logger class WebSocketClient: - """Synchronous WebSocket client for real-time data and operations.""" + """Asynchronous WebSocket client for real-time data and operations.""" @validate_call(config=ConfigDict(arbitrary_types_allowed=True)) def __init__( @@ -43,7 +42,7 @@ def __init__( session_key: str, subaccount_id: int, env: Environment, - logger: Logger | None = None, + logger: LoggerType | None = None, request_timeout: float = 10.0, ): config = CONFIGS[env] @@ -177,6 +176,10 @@ async def _instantiate_subaccount(self, subaccount_id: int) -> Subaccount: private_api=self._private_api, # type: ignore ) + @property + def logger(self) -> LoggerType: + return self._logger + @property def account(self) -> LightAccount: """Get the LightAccount instance.""" diff --git a/derive_client/_clients/websockets/session.py b/derive_client/_clients/websockets/session.py index 1d54a610..973e6e00 100644 --- a/derive_client/_clients/websockets/session.py +++ b/derive_client/_clients/websockets/session.py @@ -9,7 +9,6 @@ import inspect import uuid import weakref -from logging import Logger from typing import TYPE_CHECKING, Any, Awaitable, Callable, Optional, Type, cast import msgspec @@ -19,6 +18,7 @@ from websockets.exceptions import ConnectionClosed from derive_client._clients.utils import JSONRPCEnvelope, decode_envelope +from derive_client.data_types import LoggerType from derive_client.utils.logger import get_logger if TYPE_CHECKING: @@ -75,7 +75,7 @@ def __init__( reconnect: bool = True, reconnect_delay: float = 1.0, max_reconnect_delay: float = 60.0, - logger: Logger | None = None, + logger: LoggerType | None = None, on_disconnect: LifecycleCallback | None = None, on_reconnect: LifecycleCallback | None = None, on_before_resubscribe: LifecycleCallback | None = None, @@ -546,7 +546,7 @@ async def _run_handler(self, channel: str, handler: Handler, notification: Any) self._logger.error(f"Handler error for {channel}: {e}", exc_info=True) @staticmethod - def _finalize(logger: Logger) -> None: + def _finalize(logger: LoggerType) -> None: """Finalizer for cleanup.""" logger.debug("WebSocketSession garbage collected without explicit close()") diff --git a/docs/reference/clients/asynchttpclient.md b/docs/reference/clients/asynchttpclient.md index 350b4afb..c7a607ba 100644 --- a/docs/reference/clients/asynchttpclient.md +++ b/docs/reference/clients/asynchttpclient.md @@ -5,7 +5,7 @@ show_root_heading: false heading_level: 2 members_order: source - members: ['__init__', 'account', 'active_subaccount', 'bridge', 'cached_subaccounts', 'collateral', 'connect', 'disconnect', 'fetch_subaccount', 'fetch_subaccounts', 'from_env', 'markets', 'mmp', 'orders', 'positions', 'rfq', 'timeout', 'trades', 'transactions'] + members: ['__init__', 'account', 'active_subaccount', 'bridge', 'cached_subaccounts', 'collateral', 'connect', 'disconnect', 'fetch_subaccount', 'fetch_subaccounts', 'from_env', 'logger', 'markets', 'mmp', 'orders', 'positions', 'rfq', 'timeout', 'trades', 'transactions'] show_bases: false show_source: false inherited_members: false diff --git a/docs/reference/clients/httpclient.md b/docs/reference/clients/httpclient.md index e9a26dc9..9e4875b9 100644 --- a/docs/reference/clients/httpclient.md +++ b/docs/reference/clients/httpclient.md @@ -5,7 +5,7 @@ show_root_heading: false heading_level: 2 members_order: source - members: ['__init__', 'account', 'active_subaccount', 'bridge', 'cached_subaccounts', 'collateral', 'connect', 'disconnect', 'fetch_subaccount', 'fetch_subaccounts', 'from_env', 'markets', 'mmp', 'orders', 'positions', 'rfq', 'timeout', 'trades', 'transactions'] + members: ['__init__', 'account', 'active_subaccount', 'bridge', 'cached_subaccounts', 'collateral', 'connect', 'disconnect', 'fetch_subaccount', 'fetch_subaccounts', 'from_env', 'logger', 'markets', 'mmp', 'orders', 'positions', 'rfq', 'timeout', 'trades', 'transactions'] show_bases: false show_source: false inherited_members: false