nautilus_execution/python/
config.rs1use nautilus_core::python::to_pyvalue_err;
19use nautilus_model::identifiers::ClientId;
20use pyo3::{PyResult, pymethods};
21
22use crate::{engine::config::ExecutionEngineConfig, order_emulator::config::OrderEmulatorConfig};
23
24#[pyo3_stub_gen::derive::gen_stub_pymethods]
25#[pymethods]
26impl ExecutionEngineConfig {
27 #[new]
29 #[expect(clippy::too_many_arguments)]
30 #[pyo3(signature = (
31 load_cache = None,
32 manage_own_order_books = None,
33 snapshot_orders = None,
34 snapshot_positions = None,
35 snapshot_positions_interval_secs = None,
36 carry_replay_events_on_reopen = None,
37 allow_overfills = None,
38 external_clients = None,
39 purge_closed_orders_interval_mins = None,
40 purge_closed_orders_buffer_mins = None,
41 purge_closed_positions_interval_mins = None,
42 purge_closed_positions_buffer_mins = None,
43 purge_account_events_interval_mins = None,
44 purge_account_events_lookback_mins = None,
45 purge_from_database = None,
46 debug = None,
47 ))]
48 fn py_new(
49 load_cache: Option<bool>,
50 manage_own_order_books: Option<bool>,
51 snapshot_orders: Option<bool>,
52 snapshot_positions: Option<bool>,
53 snapshot_positions_interval_secs: Option<f64>,
54 carry_replay_events_on_reopen: Option<bool>,
55 allow_overfills: Option<bool>,
56 external_clients: Option<Vec<ClientId>>,
57 purge_closed_orders_interval_mins: Option<u32>,
58 purge_closed_orders_buffer_mins: Option<u32>,
59 purge_closed_positions_interval_mins: Option<u32>,
60 purge_closed_positions_buffer_mins: Option<u32>,
61 purge_account_events_interval_mins: Option<u32>,
62 purge_account_events_lookback_mins: Option<u32>,
63 purge_from_database: Option<bool>,
64 debug: Option<bool>,
65 ) -> PyResult<Self> {
66 Self::builder()
67 .maybe_load_cache(load_cache)
68 .maybe_manage_own_order_books(manage_own_order_books)
69 .maybe_snapshot_orders(snapshot_orders)
70 .maybe_snapshot_positions(snapshot_positions)
71 .maybe_snapshot_positions_interval_secs(snapshot_positions_interval_secs)
72 .maybe_carry_replay_events_on_reopen(carry_replay_events_on_reopen)
73 .maybe_allow_overfills(allow_overfills)
74 .maybe_external_clients(external_clients)
75 .maybe_purge_closed_orders_interval_mins(purge_closed_orders_interval_mins)
76 .maybe_purge_closed_orders_buffer_mins(purge_closed_orders_buffer_mins)
77 .maybe_purge_closed_positions_interval_mins(purge_closed_positions_interval_mins)
78 .maybe_purge_closed_positions_buffer_mins(purge_closed_positions_buffer_mins)
79 .maybe_purge_account_events_interval_mins(purge_account_events_interval_mins)
80 .maybe_purge_account_events_lookback_mins(purge_account_events_lookback_mins)
81 .maybe_purge_from_database(purge_from_database)
82 .maybe_debug(debug)
83 .build()
84 .map_err(to_pyvalue_err)
85 }
86
87 #[getter]
88 #[pyo3(name = "load_cache")]
89 const fn py_load_cache(&self) -> bool {
90 self.load_cache
91 }
92
93 #[getter]
94 #[pyo3(name = "manage_own_order_books")]
95 const fn py_manage_own_order_books(&self) -> bool {
96 self.manage_own_order_books
97 }
98
99 #[getter]
100 #[pyo3(name = "snapshot_orders")]
101 const fn py_snapshot_orders(&self) -> bool {
102 self.snapshot_orders
103 }
104
105 #[getter]
106 #[pyo3(name = "snapshot_positions")]
107 const fn py_snapshot_positions(&self) -> bool {
108 self.snapshot_positions
109 }
110
111 #[getter]
112 #[pyo3(name = "snapshot_positions_interval_secs")]
113 const fn py_snapshot_positions_interval_secs(&self) -> Option<f64> {
114 self.snapshot_positions_interval_secs
115 }
116
117 #[getter]
118 #[pyo3(name = "carry_replay_events_on_reopen")]
119 const fn py_carry_replay_events_on_reopen(&self) -> bool {
120 self.carry_replay_events_on_reopen
121 }
122
123 #[getter]
124 #[pyo3(name = "allow_overfills")]
125 const fn py_allow_overfills(&self) -> bool {
126 self.allow_overfills
127 }
128
129 #[getter]
130 #[pyo3(name = "external_clients")]
131 fn py_external_clients(&self) -> Option<Vec<ClientId>> {
132 self.external_clients.clone()
133 }
134
135 #[getter]
136 #[pyo3(name = "purge_closed_orders_interval_mins")]
137 const fn py_purge_closed_orders_interval_mins(&self) -> Option<u32> {
138 self.purge_closed_orders_interval_mins
139 }
140
141 #[getter]
142 #[pyo3(name = "purge_closed_orders_buffer_mins")]
143 const fn py_purge_closed_orders_buffer_mins(&self) -> Option<u32> {
144 self.purge_closed_orders_buffer_mins
145 }
146
147 #[getter]
148 #[pyo3(name = "purge_closed_positions_interval_mins")]
149 const fn py_purge_closed_positions_interval_mins(&self) -> Option<u32> {
150 self.purge_closed_positions_interval_mins
151 }
152
153 #[getter]
154 #[pyo3(name = "purge_closed_positions_buffer_mins")]
155 const fn py_purge_closed_positions_buffer_mins(&self) -> Option<u32> {
156 self.purge_closed_positions_buffer_mins
157 }
158
159 #[getter]
160 #[pyo3(name = "purge_account_events_interval_mins")]
161 const fn py_purge_account_events_interval_mins(&self) -> Option<u32> {
162 self.purge_account_events_interval_mins
163 }
164
165 #[getter]
166 #[pyo3(name = "purge_account_events_lookback_mins")]
167 const fn py_purge_account_events_lookback_mins(&self) -> Option<u32> {
168 self.purge_account_events_lookback_mins
169 }
170
171 #[getter]
172 #[pyo3(name = "purge_from_database")]
173 const fn py_purge_from_database(&self) -> bool {
174 self.purge_from_database
175 }
176
177 #[getter]
178 #[pyo3(name = "debug")]
179 const fn py_debug(&self) -> bool {
180 self.debug
181 }
182
183 fn __repr__(&self) -> String {
184 format!("{self:?}")
185 }
186
187 fn __str__(&self) -> String {
188 format!("{self:?}")
189 }
190}
191
192#[pymethods]
193#[pyo3_stub_gen::derive::gen_stub_pymethods]
194impl OrderEmulatorConfig {
195 #[new]
197 #[pyo3(signature = (debug = None))]
198 fn py_new(debug: Option<bool>) -> Self {
199 Self::builder().maybe_debug(debug).build()
200 }
201
202 #[getter]
203 #[pyo3(name = "debug")]
204 const fn py_debug(&self) -> bool {
205 self.debug
206 }
207
208 fn __repr__(&self) -> String {
209 format!("{self:?}")
210 }
211
212 fn __str__(&self) -> String {
213 format!("{self:?}")
214 }
215}