Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/upbeat/api/orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,12 @@ def cancel_and_new(
)
return CancelAndNewOrderResponse.model_validate(response.data)

def get_chance(self, *, market: str) -> list[OrderChance]:
def get_chance(self, *, market: str) -> OrderChance:
params = {"market": market}
response = self._transport.request(
"GET", "/v1/orders/chance", params=params, credentials=self._credentials
)
return [OrderChance.model_validate(item) for item in response.data]
return OrderChance.model_validate(response.data)


class AsyncOrdersAPI(_AsyncAPIResource):
Expand Down Expand Up @@ -458,9 +458,9 @@ async def cancel_and_new(
)
return CancelAndNewOrderResponse.model_validate(response.data)

async def get_chance(self, *, market: str) -> list[OrderChance]:
async def get_chance(self, *, market: str) -> OrderChance:
params = {"market": market}
response = await self._transport.request(
"GET", "/v1/orders/chance", params=params, credentials=self._credentials
)
return [OrderChance.model_validate(item) for item in response.data]
return OrderChance.model_validate(response.data)
6 changes: 3 additions & 3 deletions src/upbeat/types/order.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class OrderCreated(BaseModel):
state: str
created_at: str
volume: str | None = None
remaining_volume: str
remaining_volume: str | None = None
executed_volume: str
reserved_fee: str
remaining_fee: str
Expand All @@ -42,8 +42,8 @@ class OrderCreated(BaseModel):
time_in_force: str | None = None
identifier: str | None = None
smp_type: str | None = None
prevented_volume: str
prevented_locked: str
prevented_volume: str | None = None
prevented_locked: str | None = None


# ── OrderDetail (GET /v1/order 응답) ────────────────────────────────────
Expand Down
24 changes: 11 additions & 13 deletions tests/api/test_orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -512,27 +512,26 @@ def test_calls_correct_endpoint(self) -> None:
def handler(request: httpx.Request) -> httpx.Response:
assert request.url.path == "/v1/orders/chance"
assert request.url.params["market"] == "KRW-BTC"
return _json_response([ORDER_CHANCE_DATA])
return _json_response(ORDER_CHANCE_DATA)

transport = _make_transport(handler)
api = OrdersAPI(transport, CREDENTIALS)
result = api.get_chance(market="KRW-BTC")
assert len(result) == 1
assert isinstance(result[0], OrderChance)
assert result[0].bid_fee == "0.0005"
assert isinstance(result, OrderChance)
assert result.bid_fee == "0.0005"

def test_parses_nested_objects(self) -> None:
def handler(request: httpx.Request) -> httpx.Response:
return _json_response([ORDER_CHANCE_DATA])
return _json_response(ORDER_CHANCE_DATA)

transport = _make_transport(handler)
api = OrdersAPI(transport, CREDENTIALS)
result = api.get_chance(market="KRW-BTC")
assert result[0].market.id == "KRW-BTC"
assert result[0].market.bid is not None
assert result[0].market.bid.currency == "KRW"
assert result[0].bid_account.currency == "KRW"
assert result[0].ask_account.currency == "BTC"
assert result.market.id == "KRW-BTC"
assert result.market.bid is not None
assert result.market.bid.currency == "KRW"
assert result.bid_account.currency == "KRW"
assert result.ask_account.currency == "BTC"


# ── TestAsyncOrders ──────────────────────────────────────────────────────
Expand Down Expand Up @@ -578,10 +577,9 @@ async def handler(request: httpx.Request) -> httpx.Response:
@pytest.mark.asyncio
async def test_get_chance(self) -> None:
async def handler(request: httpx.Request) -> httpx.Response:
return _json_response([ORDER_CHANCE_DATA])
return _json_response(ORDER_CHANCE_DATA)

transport = _make_async_transport(handler)
api = AsyncOrdersAPI(transport, CREDENTIALS)
result = await api.get_chance(market="KRW-BTC")
assert len(result) == 1
assert isinstance(result[0], OrderChance)
assert isinstance(result, OrderChance)
Loading