1use nautilus_model::identifiers::AccountId;
19use pyo3::prelude::*;
20
21use crate::config::{BitmexDataClientConfig, BitmexExecClientConfig};
22
23#[pymethods]
24impl BitmexDataClientConfig {
25 #[new]
26 #[pyo3(signature = (
27 api_key = None,
28 api_secret = None,
29 base_url_http = None,
30 base_url_ws = None,
31 http_proxy_url = None,
32 http_timeout_secs = None,
33 max_retries = None,
34 retry_delay_initial_ms = None,
35 retry_delay_max_ms = None,
36 heartbeat_interval_secs = None,
37 recv_window_ms = None,
38 active_only = None,
39 update_instruments_interval_mins = None,
40 use_testnet = None,
41 max_requests_per_second = None,
42 max_requests_per_minute = None,
43 ))]
44 #[allow(clippy::too_many_arguments)]
45 fn py_new(
46 api_key: Option<String>,
47 api_secret: Option<String>,
48 base_url_http: Option<String>,
49 base_url_ws: Option<String>,
50 http_proxy_url: Option<String>,
51 http_timeout_secs: Option<u64>,
52 max_retries: Option<u32>,
53 retry_delay_initial_ms: Option<u64>,
54 retry_delay_max_ms: Option<u64>,
55 heartbeat_interval_secs: Option<u64>,
56 recv_window_ms: Option<u64>,
57 active_only: Option<bool>,
58 update_instruments_interval_mins: Option<u64>,
59 use_testnet: Option<bool>,
60 max_requests_per_second: Option<u32>,
61 max_requests_per_minute: Option<u32>,
62 ) -> Self {
63 let defaults = Self::default();
64 Self {
65 api_key,
66 api_secret,
67 base_url_http,
68 base_url_ws,
69 http_proxy_url,
70 ws_proxy_url: None,
71 http_timeout_secs: http_timeout_secs.or(defaults.http_timeout_secs),
72 max_retries: max_retries.or(defaults.max_retries),
73 retry_delay_initial_ms: retry_delay_initial_ms.or(defaults.retry_delay_initial_ms),
74 retry_delay_max_ms: retry_delay_max_ms.or(defaults.retry_delay_max_ms),
75 heartbeat_interval_secs,
76 recv_window_ms: recv_window_ms.or(defaults.recv_window_ms),
77 active_only: active_only.unwrap_or(defaults.active_only),
78 update_instruments_interval_mins,
79 use_testnet: use_testnet.unwrap_or(defaults.use_testnet),
80 max_requests_per_second: max_requests_per_second.or(defaults.max_requests_per_second),
81 max_requests_per_minute: max_requests_per_minute.or(defaults.max_requests_per_minute),
82 }
83 }
84
85 fn __repr__(&self) -> String {
86 format!("{self:?}")
87 }
88}
89
90#[pymethods]
91impl BitmexExecClientConfig {
92 #[new]
93 #[pyo3(signature = (
94 api_key = None,
95 api_secret = None,
96 base_url_http = None,
97 base_url_ws = None,
98 http_proxy_url = None,
99 http_timeout_secs = None,
100 max_retries = None,
101 retry_delay_initial_ms = None,
102 retry_delay_max_ms = None,
103 heartbeat_interval_secs = None,
104 recv_window_ms = None,
105 active_only = None,
106 use_testnet = None,
107 account_id = None,
108 max_requests_per_second = None,
109 max_requests_per_minute = None,
110 submitter_pool_size = None,
111 canceller_pool_size = None,
112 submitter_proxy_urls = None,
113 canceller_proxy_urls = None,
114 deadmans_switch_timeout_secs = None,
115 ))]
116 #[allow(clippy::too_many_arguments)]
117 fn py_new(
118 api_key: Option<String>,
119 api_secret: Option<String>,
120 base_url_http: Option<String>,
121 base_url_ws: Option<String>,
122 http_proxy_url: Option<String>,
123 http_timeout_secs: Option<u64>,
124 max_retries: Option<u32>,
125 retry_delay_initial_ms: Option<u64>,
126 retry_delay_max_ms: Option<u64>,
127 heartbeat_interval_secs: Option<u64>,
128 recv_window_ms: Option<u64>,
129 active_only: Option<bool>,
130 use_testnet: Option<bool>,
131 account_id: Option<AccountId>,
132 max_requests_per_second: Option<u32>,
133 max_requests_per_minute: Option<u32>,
134 submitter_pool_size: Option<usize>,
135 canceller_pool_size: Option<usize>,
136 submitter_proxy_urls: Option<Vec<String>>,
137 canceller_proxy_urls: Option<Vec<String>>,
138 deadmans_switch_timeout_secs: Option<u64>,
139 ) -> Self {
140 let defaults = Self::default();
141 Self {
142 api_key,
143 api_secret,
144 base_url_http,
145 base_url_ws,
146 http_proxy_url,
147 ws_proxy_url: None,
148 http_timeout_secs: http_timeout_secs.or(defaults.http_timeout_secs),
149 max_retries: max_retries.or(defaults.max_retries),
150 retry_delay_initial_ms: retry_delay_initial_ms.or(defaults.retry_delay_initial_ms),
151 retry_delay_max_ms: retry_delay_max_ms.or(defaults.retry_delay_max_ms),
152 heartbeat_interval_secs: heartbeat_interval_secs.or(defaults.heartbeat_interval_secs),
153 recv_window_ms: recv_window_ms.or(defaults.recv_window_ms),
154 active_only: active_only.unwrap_or(defaults.active_only),
155 use_testnet: use_testnet.unwrap_or(defaults.use_testnet),
156 account_id,
157 max_requests_per_second: max_requests_per_second.or(defaults.max_requests_per_second),
158 max_requests_per_minute: max_requests_per_minute.or(defaults.max_requests_per_minute),
159 submitter_pool_size,
160 canceller_pool_size,
161 submitter_proxy_urls,
162 canceller_proxy_urls,
163 deadmans_switch_timeout_secs,
164 }
165 }
166
167 fn __repr__(&self) -> String {
168 format!("{self:?}")
169 }
170}