11"""Unit tests for the unified BtApiStore."""
22
33import datetime as dt
4+ import sys
45import time
6+ import types
57
68import pytest
79
1012from backtrader .stores .btapistore import (
1113 BtApiMissingDependencyError ,
1214 BtApiProviderNotImplementedError ,
13- BtApiStoreError ,
1415 BtApiStore ,
16+ BtApiStoreError ,
1517 _build_ctp_tick_datetime ,
1618 _create_ctp_gateway_wrapper_class ,
1719 _create_ctp_wrapper_class ,
2426 FakeBtApiClient ,
2527 make_bar ,
2628 make_orderbook ,
27- make_tick ,
2829 make_store ,
30+ make_tick ,
2931)
3032
3133
@@ -2217,9 +2219,7 @@ def cancel_order(self, order_ref, dataname=None):
22172219 event_types = [event ["event_type" ] for event in runtime_events ]
22182220 assert "order_cancel_request" in event_types
22192221 assert "order_cancel_submitted" in event_types
2220- assert event_types .index ("order_cancel_request" ) < event_types .index (
2221- "order_cancel_submitted"
2222- )
2222+ assert event_types .index ("order_cancel_request" ) < event_types .index ("order_cancel_submitted" )
22232223 submitted = next (
22242224 event for event in runtime_events if event ["event_type" ] == "order_cancel_submitted"
22252225 )
@@ -3017,7 +3017,9 @@ def test_store_broker_runtime_trade_event_preserves_fee_and_liquidity_fields():
30173017
30183018 assert update ["trade_fee" ] == pytest .approx (0.12 )
30193019 runtime_events = [kwargs ["event" ] for _msg , _args , kwargs in store .get_notifications ()]
3020- trade_event = next (event for event in runtime_events if event ["event_type" ] == "trade_execution" )
3020+ trade_event = next (
3021+ event for event in runtime_events if event ["event_type" ] == "trade_execution"
3022+ )
30213023 assert trade_event ["order_ref" ] == "ex-7"
30223024 assert trade_event ["details" ]["trade_fee" ] == pytest .approx (0.12 )
30233025 assert trade_event ["details" ]["trade_commission" ] == pytest .approx (0.12 )
@@ -3584,7 +3586,6 @@ def test_gateway_wrapper_fetch_bars_proxies(fake_client):
35843586
35853587def test_ctp_gateway_wrapper_symbol_info_accepts_get_symbol_info_alias (monkeypatch ):
35863588 """Gateway wrapper should expose exchange asset specs from either symbol-info alias."""
3587- import bt_api_py .gateway .client as gateway_client_module
35883589
35893590 class SymbolInfoGatewayClient :
35903591 def __init__ (self , ** kwargs ):
@@ -3599,7 +3600,16 @@ def get_symbol_info(self, symbol):
35993600 "taker_fee_rate" : 0.0005 ,
36003601 }
36013602
3602- monkeypatch .setattr (gateway_client_module , "GatewayClient" , SymbolInfoGatewayClient )
3603+ bt_api_module = types .ModuleType ("bt_api_py" )
3604+ gateway_module = types .ModuleType ("bt_api_py.gateway" )
3605+ gateway_client_module = types .ModuleType ("bt_api_py.gateway.client" )
3606+ gateway_client_module .GatewayClient = SymbolInfoGatewayClient
3607+ gateway_module .client = gateway_client_module
3608+ bt_api_module .gateway = gateway_module
3609+ monkeypatch .setitem (sys .modules , "bt_api_py" , bt_api_module )
3610+ monkeypatch .setitem (sys .modules , "bt_api_py.gateway" , gateway_module )
3611+ monkeypatch .setitem (sys .modules , "bt_api_py.gateway.client" , gateway_client_module )
3612+
36033613 wrapper_cls = _create_ctp_gateway_wrapper_class ()
36043614 client = wrapper_cls (account_id = "acc-1" )
36053615
0 commit comments