Remove inner class Connection.Authenticable (_connection.py).

This commit is contained in:
Davide Casale
2023-10-01 22:36:47 +02:00
parent 82a3307205
commit 22451f674e
2 changed files with 22 additions and 24 deletions

View File

@@ -69,7 +69,7 @@ class _Delay:
def reset(self) -> None:
self.__backoff_delay = _Delay.__BACKOFF_MIN
class BfxWebSocketClient(Connection, Connection.Authenticable):
class BfxWebSocketClient(Connection):
VERSION = BfxWebSocketBucket.VERSION
MAXIMUM_CONNECTIONS_AMOUNT = 20
@@ -307,7 +307,7 @@ class BfxWebSocketClient(Connection, Connection.Authenticable):
await self._websocket.close( \
code=code, reason=reason)
@Connection.Authenticable.require_websocket_authentication
@Connection.require_websocket_authentication
async def notify(self,
info: Any,
message_id: Optional[int] = None,
@@ -316,7 +316,7 @@ class BfxWebSocketClient(Connection, Connection.Authenticable):
json.dumps([ 0, "n", message_id,
{ "type": "ucm-test", "info": info, **kwargs } ]))
@Connection.Authenticable.require_websocket_authentication
@Connection.require_websocket_authentication
async def __handle_websocket_input(self, event: str, data: Any) -> None:
await self._websocket.send(json.dumps(\
[ 0, event, None, data], cls=JSONEncoder))

View File

@@ -10,30 +10,11 @@ if TYPE_CHECKING:
class Connection:
HEARTBEAT = "hb"
class Authenticable:
def __init__(self) -> None:
self._authentication: bool = False
@property
def authentication(self) -> bool:
return self._authentication
@staticmethod
def require_websocket_authentication(function):
async def wrapper(self, *args, **kwargs):
if not self.authentication:
raise ActionRequiresAuthentication("To perform this action you need to " \
"authenticate using your API_KEY and API_SECRET.")
internal = Connection.require_websocket_connection(function)
return await internal(self, *args, **kwargs)
return wrapper
def __init__(self, host: str) -> None:
self._host = host
self._authentication: bool = False
self.__protocol: Optional["WebSocketClientProtocol"] = None
@property
@@ -41,6 +22,10 @@ class Connection:
return self.__protocol is not None and \
self.__protocol.open
@property
def authentication(self) -> bool:
return self._authentication
@property
def _websocket(self) -> "WebSocketClientProtocol":
return cast("WebSocketClientProtocol", self.__protocol)
@@ -58,3 +43,16 @@ class Connection:
raise ConnectionNotOpen("No open connection with the server.")
return wrapper
@staticmethod
def require_websocket_authentication(function):
async def wrapper(self, *args, **kwargs):
if not self.authentication:
raise ActionRequiresAuthentication("To perform this action you need to " \
"authenticate using your API_KEY and API_SECRET.")
internal = Connection.require_websocket_connection(function)
return await internal(self, *args, **kwargs)
return wrapper