[+] improve asset_history

This commit is contained in:
Siarhei Siniak 2025-07-16 11:04:17 +03:00
parent 17bfb08e43
commit f4831d5759
2 changed files with 16 additions and 8 deletions

@ -30,12 +30,15 @@ Action = pydantic.RootModel[
] ]
class AssetHistoryResponse(pydantic.BaseModel): class AssetHistoryResponse(pydantic.BaseModel):
action: Literal['asset_history'] action: Literal['asset_history'] = 'asset_history'
class message_t(pydantic.BaseModel): class message_t(pydantic.BaseModel):
class point_t(pydantic.BaseModel): class point_t(pydantic.BaseModel):
asset_name : Annotated[ asset_name : Annotated[
str, str,
pydantic.Field(alias='assetName') pydantic.Field(
alias='assetName',
)
] ]
time: int time: int
asset_id : Annotated[ asset_id : Annotated[
@ -48,11 +51,13 @@ class AssetHistoryResponse(pydantic.BaseModel):
message: message_t message: message_t
class AssetTickerResponse(pydantic.BaseModel): class AssetTickerResponse(pydantic.BaseModel):
action: Literal['point'] action: Literal['point'] = 'point'
message: 'AssetHistoryResponse.message_t.point_t' message: 'AssetHistoryResponse.message_t.point_t'
class AssetsResponse(pydantic.BaseModel): class AssetsResponse(pydantic.BaseModel):
action: Literal['asset_history'] action: Literal['asset_history'] = 'asset_history'
class message_t(pydantic.BaseModel): class message_t(pydantic.BaseModel):
class asset_t(pydantic.BaseModel): class asset_t(pydantic.BaseModel):
id: int id: int

@ -42,6 +42,9 @@ class WebsocketAPI:
del self.subscriptions_by_asset_id[last_asset_id] del self.subscriptions_by_asset_id[last_asset_id]
del self.subscriptions_by_client[client] del self.subscriptions_by_client[client]
if not asset_id in self.subscriptions_by_asset_id:
self.subscriptions_by_asset_id[asset_id] = set()
self.subscriptions_by_asset_id[asset_id].add(client) self.subscriptions_by_asset_id[asset_id].add(client)
self.subscriptions_by_client[client] = asset_id self.subscriptions_by_client[client] = asset_id
@ -59,10 +62,10 @@ class WebsocketAPI:
) )
await client.send_text( await client.send_text(
schema.AssetHistoryResponse.model_validate(dict( schema.AssetHistoryResponse(
message=dict( message=schema.AssetHistoryResponse.message_t(
points=[ points=[
dict( schema.AssetHistoryResponse.message_t.point_t.model_construct(
asset_name=o.market.name, asset_name=o.market.name,
asset_id=o.market.id, asset_id=o.market.id,
time=o.timestamp.timestamp(), time=o.timestamp.timestamp(),
@ -71,7 +74,7 @@ class WebsocketAPI:
for o in tickers for o in tickers
] ]
) )
)).json(), ).json(by_alias=True,),
) )
async def assets_index( async def assets_index(