diff --git a/bfxapi/rest/endpoints/rest_authenticated_endpoints.py b/bfxapi/rest/endpoints/rest_authenticated_endpoints.py index b9e9ff3..db1c37e 100644 --- a/bfxapi/rest/endpoints/rest_authenticated_endpoints.py +++ b/bfxapi/rest/endpoints/rest_authenticated_endpoints.py @@ -128,7 +128,7 @@ class RestAuthenticatedEndpoints(Middleware): all: bool = False) -> Notification[List[Order]]: body = { "ids": ids, "cids": cids, "gids": gids, - "all": int(all) + "all": all } return _Notification[List[Order]](serializers.Order, is_iterable=True) \ @@ -319,7 +319,7 @@ class RestAuthenticatedEndpoints(Middleware): rate: Optional[int] = None, period: Optional[int] = None) -> Notification[FundingAutoRenew]: body = { - "status": int(status), "currency": currency, "amount": amount, + "status": status, "currency": currency, "amount": amount, "rate": rate, "period": period } @@ -449,7 +449,7 @@ class RestAuthenticatedEndpoints(Middleware): renew: bool = False) -> Notification[DepositAddress]: return _Notification[DepositAddress](serializers.DepositAddress) \ .parse(*self._post("auth/w/deposit/address", \ - body={ "wallet": wallet, "method": method, "renew": int(renew) })) + body={ "wallet": wallet, "method": method, "renew": renew })) def generate_deposit_invoice(self, wallet: str, diff --git a/bfxapi/utils/json_encoder.py b/bfxapi/utils/json_encoder.py index 21f0b7e..3da4c99 100644 --- a/bfxapi/utils/json_encoder.py +++ b/bfxapi/utils/json_encoder.py @@ -9,18 +9,20 @@ JSON = Union[Dict[str, "JSON"], List["JSON"], bool, int, float, str, Type[None]] def _strip(dictionary: Dict) -> Dict: return { key: value for key, value in dictionary.items() if value is not None } -def _convert_float_to_str(data: JSON) -> JSON: +def _convert_data_to_json(data: JSON) -> JSON: + if isinstance(data, bool): + return int(data) if isinstance(data, float): return format(Decimal(repr(data)), "f") if isinstance(data, list): - return [ _convert_float_to_str(sub_data) for sub_data in data ] + return [ _convert_data_to_json(sub_data) for sub_data in data ] if isinstance(data, dict): - return _strip({ key: _convert_float_to_str(value) for key, value in data.items() }) + return _strip({ key: _convert_data_to_json(value) for key, value in data.items() }) return data class JSONEncoder(json.JSONEncoder): def encode(self, o: JSON) -> str: - return json.JSONEncoder.encode(self, _convert_float_to_str(o)) + return json.JSONEncoder.encode(self, _convert_data_to_json(o)) def default(self, o: Any) -> Any: if isinstance(o, Decimal): diff --git a/bfxapi/websocket/client/bfx_websocket_inputs.py b/bfxapi/websocket/client/bfx_websocket_inputs.py index 46a3de8..0725f15 100644 --- a/bfxapi/websocket/client/bfx_websocket_inputs.py +++ b/bfxapi/websocket/client/bfx_websocket_inputs.py @@ -1,37 +1,36 @@ from typing import TYPE_CHECKING, Callable, Awaitable, \ Tuple, List, Union, Optional, Any -from decimal import Decimal - -from datetime import datetime - if TYPE_CHECKING: from bfxapi.enums import \ OrderType, FundingOfferType from bfxapi.types import JSON - _Handler = Callable[[str, Any], Awaitable[None]] + from decimal import Decimal + + from datetime import datetime class BfxWebSocketInputs: - def __init__(self, handle_websocket_input: "_Handler") -> None: + def __init__(self, handle_websocket_input: Callable[[str, Any], Awaitable[None]]) -> None: self.__handle_websocket_input = handle_websocket_input async def submit_order(self, - type: "OrderType", - symbol: str, - amount: Union[Decimal, float, str], - *, - price: Optional[Union[Decimal, float, str]] = None, - lev: Optional[int] = None, - price_trailing: Optional[Union[Decimal, float, str]] = None, - price_aux_limit: Optional[Union[Decimal, float, str]] = None, - price_oco_stop: Optional[Union[Decimal, float, str]] = None, - gid: Optional[int] = None, - cid: Optional[int] = None, - flags: Optional[int] = 0, - tif: Optional[Union[datetime, str]] = None, - meta: Optional["JSON"] = None) -> None: + type: "OrderType", + symbol: str, + amount: Union["Decimal", float, str], + *, + price: Optional[Union["Decimal", float, str]] = None, + lev: Optional[int] = None, + price_trailing: Optional[Union["Decimal", float, str]] = None, + price_aux_limit: Optional[Union["Decimal", float, str]] = None, + price_oco_stop: Optional[Union["Decimal", float, str]] = None, + gid: Optional[int] = None, + cid: Optional[int] = None, + flags: Optional[int] = 0, + tif: Optional[Union["datetime", str]] = None, + meta: Optional["JSON"] = None) -> None: + await self.__handle_websocket_input("on", { "type": type, "symbol": symbol, "amount": amount, "price": price, "lev": lev, "price_trailing": price_trailing, @@ -41,19 +40,19 @@ class BfxWebSocketInputs: }) async def update_order(self, - id: int, - *, - amount: Optional[Union[Decimal, float, str]] = None, - price: Optional[Union[Decimal, float, str]] = None, - cid: Optional[int] = None, - cid_date: Optional[str] = None, - gid: Optional[int] = None, - flags: Optional[int] = 0, - lev: Optional[int] = None, - delta: Optional[Union[Decimal, float, str]] = None, - price_aux_limit: Optional[Union[Decimal, float, str]] = None, - price_trailing: Optional[Union[Decimal, float, str]] = None, - tif: Optional[Union[datetime, str]] = None) -> None: + id: int, + *, + amount: Optional[Union["Decimal", float, str]] = None, + price: Optional[Union["Decimal", float, str]] = None, + cid: Optional[int] = None, + cid_date: Optional[str] = None, + gid: Optional[int] = None, + flags: Optional[int] = 0, + lev: Optional[int] = None, + delta: Optional[Union["Decimal", float, str]] = None, + price_aux_limit: Optional[Union["Decimal", float, str]] = None, + price_trailing: Optional[Union["Decimal", float, str]] = None, + tif: Optional[Union["datetime", str]] = None) -> None: await self.__handle_websocket_input("ou", { "id": id, "amount": amount, "price": price, "cid": cid, "cid_date": cid_date, "gid": gid, @@ -62,34 +61,34 @@ class BfxWebSocketInputs: }) async def cancel_order(self, - *, - id: Optional[int] = None, - cid: Optional[int] = None, - cid_date: Optional[str] = None) -> None: + *, + id: Optional[int] = None, + cid: Optional[int] = None, + cid_date: Optional[str] = None) -> None: await self.__handle_websocket_input("oc", { "id": id, "cid": cid, "cid_date": cid_date }) async def cancel_order_multi(self, - *, - ids: Optional[List[int]] = None, - cids: Optional[List[Tuple[int, str]]] = None, - gids: Optional[List[int]] = None, - all: bool = False) -> None: + *, + ids: Optional[List[int]] = None, + cids: Optional[List[Tuple[int, str]]] = None, + gids: Optional[List[int]] = None, + all: bool = False) -> None: await self.__handle_websocket_input("oc_multi", { "ids": ids, "cids": cids, "gids": gids, - "all": int(all) + "all": all }) #pylint: disable-next=too-many-arguments async def submit_funding_offer(self, - type: "FundingOfferType", - symbol: str, - amount: Union[Decimal, float, str], - rate: Union[Decimal, float, str], - period: int, - *, - flags: Optional[int] = 0) -> None: + type: "FundingOfferType", + symbol: str, + amount: Union["Decimal", float, str], + rate: Union["Decimal", float, str], + period: int, + *, + flags: Optional[int] = 0) -> None: await self.__handle_websocket_input("fon", { "type": type, "symbol": symbol, "amount": amount, "rate": rate, "period": period, "flags": flags