Skip to content

Commit 23e17d6

Browse files
authored
feat(client): update oco-endpoint (sammchardy#1476)
* feat(client): update oco-endpoint * add tests
1 parent 6866ca5 commit 23e17d6

2 files changed

Lines changed: 36 additions & 3 deletions

File tree

binance/client.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,7 +1867,7 @@ def order_market_sell(self, **params):
18671867
def create_oco_order(self, **params):
18681868
"""Send in a new OCO order
18691869
1870-
https://binance-docs.github.io/apidocs/spot/en/#new-oco-trade
1870+
https://binance-docs.github.io/apidocs/spot/en/#new-order-list-oco-trade
18711871
18721872
:param symbol: required
18731873
:type symbol: str
@@ -1924,7 +1924,9 @@ def create_oco_order(self, **params):
19241924
:raises: BinanceRequestException, BinanceAPIException, BinanceOrderException, BinanceOrderMinAmountException, BinanceOrderMinPriceException, BinanceOrderMinTotalException, BinanceOrderUnknownSymbolException, BinanceOrderInactiveSymbolException
19251925
19261926
"""
1927-
return self._post("order/oco", True, data=params)
1927+
if "listClientOrderId" not in params:
1928+
params["listClientOrderId"] = self.SPOT_ORDER_PREFIX + self.uuid22()
1929+
return self._post("orderList/oco", True, data=params)
19281930

19291931
def order_oco_buy(self, **params):
19301932
"""Send in a new OCO buy order
@@ -11143,7 +11145,9 @@ async def order_market_sell(self, **params):
1114311145
order_market_sell.__doc__ = Client.order_market_sell.__doc__
1114411146

1114511147
async def create_oco_order(self, **params):
11146-
return await self._post("order/oco", True, data=params)
11148+
if "listClientOrderId" not in params:
11149+
params["listClientOrderId"] = self.SPOT_ORDER_PREFIX + self.uuid22()
11150+
return await self._post("orderList/oco", True, data=params)
1114711151

1114811152
create_oco_order.__doc__ = Client.create_oco_order.__doc__
1114911153

tests/test_ids.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@ def test_spot_cancel_replace_id():
4848
url_dict = dict(pair.split("=") for pair in m.last_request.text.split("&"))
4949
assert url_dict["newClientOrderId"].startswith("x-HNA2TXFJ")
5050

51+
def test_spot_oco_order_id():
52+
with requests_mock.mock() as m:
53+
m.post("https://api.binance.com/api/v3/orderList/oco", json={}, status_code=200)
54+
client.create_oco_order(
55+
symbol="LTCUSDT", side="BUY", aboveType="MARKET", quantity=0.1
56+
)
57+
url_dict = dict(pair.split("=") for pair in m.last_request.text.split("&"))
58+
assert url_dict["listClientOrderId"].startswith("x-HNA2TXFJ")
59+
5160
def test_swap_id():
5261
with requests_mock.mock() as m:
5362
m.post("https://fapi.binance.com/fapi/v1/order", json={}, status_code=200)
@@ -262,6 +271,26 @@ def handler(url, **kwargs):
262271
await clientAsync.close_connection()
263272

264273

274+
@pytest.mark.asyncio()
275+
async def test_spot_oco_id():
276+
clientAsync = AsyncClient(api_key="api_key", api_secret="api_secret")
277+
with aioresponses() as m:
278+
279+
def handler(url, **kwargs):
280+
client_order_id = kwargs["data"][0][1]
281+
assert client_order_id.startswith("x-HNA2TXFJ")
282+
283+
m.post(
284+
"https://api.binance.com/api/v3/orderList/oco",
285+
payload={"id": 1},
286+
status=200,
287+
callback=handler,
288+
)
289+
await clientAsync.create_oco_order(
290+
symbol="BTCUSDT", side="BUY", type="MARKET", quantity=0.1
291+
)
292+
await clientAsync.close_connection()
293+
265294
@pytest.mark.asyncio()
266295
async def test_swap_batch_id_async():
267296
with aioresponses() as m:

0 commit comments

Comments
 (0)