Skip to content

Commit 0dc8896

Browse files
committed
Add DataActor Python bindings and tests
Initial work in progress tests to verify basic inheritance and attributes.
1 parent 4726a3b commit 0dc8896

File tree

3 files changed

+1001
-2
lines changed

3 files changed

+1001
-2
lines changed

crates/common/src/python/actor.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ impl DataActor for PyDataActorInner {
9999
#[pyo3::pyclass(
100100
module = "nautilus_trader.core.nautilus_pyo3.common",
101101
name = "DataActor",
102-
unsendable
102+
unsendable,
103+
subclass
103104
)]
104105
#[derive(Debug)]
105106
pub struct PyDataActor {

nautilus_trader/core/nautilus_pyo3.pyi

Lines changed: 285 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,290 @@ class CustomData:
177177
@property
178178
def ts_init(self) -> int: ...
179179

180+
###################################################################################################
181+
# Actor System
182+
###################################################################################################
183+
184+
class DataActor:
185+
def __init__(self, config: object = None) -> None: ...
186+
@property
187+
def actor_id(self) -> str: ...
188+
@property
189+
def state(self) -> Any: ... # TODO: Add ComponentState enum
190+
@property
191+
def trader_id(self) -> str | None: ...
192+
193+
def is_ready(self) -> bool: ...
194+
def is_running(self) -> bool: ...
195+
def is_stopped(self) -> bool: ...
196+
def is_disposed(self) -> bool: ...
197+
def is_degraded(self) -> bool: ...
198+
def is_faulting(self) -> bool: ...
199+
200+
def initialize(self) -> None: ...
201+
def start(self) -> None: ...
202+
def stop(self) -> None: ...
203+
def resume(self) -> None: ...
204+
def reset(self) -> None: ...
205+
def dispose(self) -> None: ...
206+
def degrade(self) -> None: ...
207+
def fault(self) -> None: ...
208+
209+
def register_warning_event(self, event_type: str) -> None: ...
210+
def deregister_warning_event(self, event_type: str) -> None: ...
211+
def shutdown_system(self, reason: str | None = None) -> None: ...
212+
213+
def subscribe_data(
214+
self,
215+
data_type: DataType,
216+
client_id: ClientId | None = None,
217+
params: dict[str, str] | None = None,
218+
) -> None:
219+
...
220+
def subscribe_instruments(
221+
self,
222+
venue: Venue,
223+
client_id: ClientId | None = None,
224+
params: dict[str, str] | None = None,
225+
) -> None:
226+
...
227+
def subscribe_instrument(
228+
self,
229+
instrument_id: InstrumentId,
230+
client_id: ClientId | None = None,
231+
params: dict[str, str] | None = None,
232+
) -> None:
233+
...
234+
def subscribe_quotes(
235+
self,
236+
instrument_id: InstrumentId,
237+
client_id: ClientId | None = None,
238+
params: dict[str, str] | None = None,
239+
) -> None:
240+
...
241+
def subscribe_trades(
242+
self,
243+
instrument_id: InstrumentId,
244+
client_id: ClientId | None = None,
245+
params: dict[str, str] | None = None,
246+
) -> None:
247+
...
248+
def subscribe_bars(
249+
self,
250+
bar_type: BarType,
251+
client_id: ClientId | None = None,
252+
await_partial: bool = False,
253+
params: dict[str, str] | None = None,
254+
) -> None:
255+
...
256+
def subscribe_book_deltas(
257+
self,
258+
instrument_id: InstrumentId,
259+
book_type: BookType,
260+
depth: int | None = None,
261+
client_id: ClientId | None = None,
262+
managed: bool = False,
263+
params: dict[str, str] | None = None,
264+
) -> None:
265+
...
266+
def subscribe_book_at_interval(
267+
self,
268+
instrument_id: InstrumentId,
269+
book_type: BookType,
270+
interval_ms: int,
271+
depth: int | None = None,
272+
client_id: ClientId | None = None,
273+
params: dict[str, str] | None = None,
274+
) -> None:
275+
...
276+
def subscribe_mark_prices(
277+
self,
278+
instrument_id: InstrumentId,
279+
client_id: ClientId | None = None,
280+
params: dict[str, str] | None = None,
281+
) -> None:
282+
...
283+
def subscribe_index_prices(
284+
self,
285+
instrument_id: InstrumentId,
286+
client_id: ClientId | None = None,
287+
params: dict[str, str] | None = None,
288+
) -> None:
289+
...
290+
def subscribe_instrument_status(
291+
self,
292+
instrument_id: InstrumentId,
293+
client_id: ClientId | None = None,
294+
params: dict[str, str] | None = None,
295+
) -> None:
296+
...
297+
def subscribe_instrument_close(
298+
self,
299+
instrument_id: InstrumentId,
300+
client_id: ClientId | None = None,
301+
params: dict[str, str] | None = None,
302+
) -> None:
303+
...
304+
def unsubscribe_data(
305+
self,
306+
data_type: DataType,
307+
client_id: ClientId | None = None,
308+
params: dict[str, str] | None = None,
309+
) -> None:
310+
...
311+
def unsubscribe_instruments(
312+
self,
313+
venue: Venue,
314+
client_id: ClientId | None = None,
315+
params: dict[str, str] | None = None,
316+
) -> None:
317+
...
318+
def unsubscribe_instrument(
319+
self,
320+
instrument_id: InstrumentId,
321+
client_id: ClientId | None = None,
322+
params: dict[str, str] | None = None,
323+
) -> None:
324+
...
325+
def unsubscribe_quotes(
326+
self,
327+
instrument_id: InstrumentId,
328+
client_id: ClientId | None = None,
329+
params: dict[str, str] | None = None,
330+
) -> None:
331+
...
332+
def unsubscribe_trades(
333+
self,
334+
instrument_id: InstrumentId,
335+
client_id: ClientId | None = None,
336+
params: dict[str, str] | None = None,
337+
) -> None:
338+
...
339+
def unsubscribe_bars(
340+
self,
341+
bar_type: BarType,
342+
client_id: ClientId | None = None,
343+
params: dict[str, str] | None = None,
344+
) -> None:
345+
...
346+
def unsubscribe_book_deltas(
347+
self,
348+
instrument_id: InstrumentId,
349+
client_id: ClientId | None = None,
350+
params: dict[str, str] | None = None,
351+
) -> None:
352+
...
353+
def unsubscribe_book_at_interval(
354+
self,
355+
instrument_id: InstrumentId,
356+
interval_ms: int,
357+
client_id: ClientId | None = None,
358+
params: dict[str, str] | None = None,
359+
) -> None:
360+
...
361+
def unsubscribe_mark_prices(
362+
self,
363+
instrument_id: InstrumentId,
364+
client_id: ClientId | None = None,
365+
params: dict[str, str] | None = None,
366+
) -> None:
367+
...
368+
def unsubscribe_index_prices(
369+
self,
370+
instrument_id: InstrumentId,
371+
client_id: ClientId | None = None,
372+
params: dict[str, str] | None = None,
373+
) -> None:
374+
...
375+
def unsubscribe_instrument_status(
376+
self,
377+
instrument_id: InstrumentId,
378+
client_id: ClientId | None = None,
379+
params: dict[str, str] | None = None,
380+
) -> None:
381+
...
382+
def unsubscribe_instrument_close(
383+
self,
384+
instrument_id: InstrumentId,
385+
client_id: ClientId | None = None,
386+
params: dict[str, str] | None = None,
387+
) -> None:
388+
...
389+
390+
def request_data(
391+
self,
392+
data_type: DataType,
393+
client_id: ClientId,
394+
start: int | None = None,
395+
end: int | None = None,
396+
limit: int | None = None,
397+
params: dict[str, str] | None = None,
398+
) -> str:
399+
...
400+
def request_instrument(
401+
self,
402+
instrument_id: InstrumentId,
403+
start: int | None = None,
404+
end: int | None = None,
405+
client_id: ClientId | None = None,
406+
params: dict[str, str] | None = None,
407+
) -> str:
408+
...
409+
def request_instruments(
410+
self,
411+
venue: Venue | None = None,
412+
start: int | None = None,
413+
end: int | None = None,
414+
client_id: ClientId | None = None,
415+
params: dict[str, str] | None = None,
416+
) -> str:
417+
...
418+
def request_book_snapshot(
419+
self,
420+
instrument_id: InstrumentId,
421+
depth: int | None = None,
422+
client_id: ClientId | None = None,
423+
params: dict[str, str] | None = None,
424+
) -> str:
425+
...
426+
def request_quotes(
427+
self,
428+
instrument_id: InstrumentId,
429+
start: int | None = None,
430+
end: int | None = None,
431+
limit: int | None = None,
432+
client_id: ClientId | None = None,
433+
params: dict[str, str] | None = None,
434+
) -> str:
435+
...
436+
def request_trades(
437+
self,
438+
instrument_id: InstrumentId,
439+
start: int | None = None,
440+
end: int | None = None,
441+
limit: int | None = None,
442+
client_id: ClientId | None = None,
443+
params: dict[str, str] | None = None,
444+
) -> str:
445+
...
446+
def request_bars(
447+
self,
448+
bar_type: BarType,
449+
start: int | None = None,
450+
end: int | None = None,
451+
limit: int | None = None,
452+
client_id: ClientId | None = None,
453+
params: dict[str, str] | None = None,
454+
) -> str:
455+
...
456+
457+
def on_data(self, data: Any) -> None: ...
458+
def on_quote_tick(self, tick: QuoteTick) -> None: ...
459+
def on_trade_tick(self, tick: TradeTick) -> None: ...
460+
def on_bar(self, bar: Bar) -> None: ...
461+
def on_start(self) -> None: ...
462+
def on_stop(self) -> None: ...
463+
180464
###################################################################################################
181465
# Cryptography
182466
###################################################################################################
@@ -407,7 +691,7 @@ class BarType:
407691
def __init__(
408692
self,
409693
instrument_id: InstrumentId,
410-
bar_spec: BarSpecification,
694+
spec: BarSpecification,
411695
aggregation_source: AggregationSource | None = None,
412696
) -> None: ...
413697
@property

0 commit comments

Comments
 (0)