From f4831d5759cf42e1428aa3cd46abaf733bc8c8f5 Mon Sep 17 00:00:00 2001 From: Siarhei Siniak Date: Wed, 16 Jul 2025 11:04:17 +0300 Subject: [PATCH] [+] improve asset_history --- .../test_task_2025_06_30_v1/async_api/schema.py | 13 +++++++++---- .../async_api/websocket_api.py | 11 +++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/schema.py b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/schema.py index 85339bd..35e90eb 100644 --- a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/schema.py +++ b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/schema.py @@ -30,12 +30,15 @@ Action = pydantic.RootModel[ ] class AssetHistoryResponse(pydantic.BaseModel): - action: Literal['asset_history'] + action: Literal['asset_history'] = 'asset_history' + class message_t(pydantic.BaseModel): class point_t(pydantic.BaseModel): asset_name : Annotated[ str, - pydantic.Field(alias='assetName') + pydantic.Field( + alias='assetName', + ) ] time: int asset_id : Annotated[ @@ -48,11 +51,13 @@ class AssetHistoryResponse(pydantic.BaseModel): message: message_t class AssetTickerResponse(pydantic.BaseModel): - action: Literal['point'] + action: Literal['point'] = 'point' + message: 'AssetHistoryResponse.message_t.point_t' class AssetsResponse(pydantic.BaseModel): - action: Literal['asset_history'] + action: Literal['asset_history'] = 'asset_history' + class message_t(pydantic.BaseModel): class asset_t(pydantic.BaseModel): id: int diff --git a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/websocket_api.py b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/websocket_api.py index efd08d8..f5fec2a 100644 --- a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/websocket_api.py +++ b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/websocket_api.py @@ -42,6 +42,9 @@ class WebsocketAPI: del self.subscriptions_by_asset_id[last_asset_id] 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_client[client] = asset_id @@ -59,10 +62,10 @@ class WebsocketAPI: ) await client.send_text( - schema.AssetHistoryResponse.model_validate(dict( - message=dict( + schema.AssetHistoryResponse( + message=schema.AssetHistoryResponse.message_t( points=[ - dict( + schema.AssetHistoryResponse.message_t.point_t.model_construct( asset_name=o.market.name, asset_id=o.market.id, time=o.timestamp.timestamp(), @@ -71,7 +74,7 @@ class WebsocketAPI: for o in tickers ] ) - )).json(), + ).json(by_alias=True,), ) async def assets_index(