nautilus_bybit/python/
mod.rs1pub mod enums;
19pub mod http;
20pub mod urls;
21pub mod websocket;
22
23use nautilus_core::python::to_pyvalue_err;
24use nautilus_model::enums::BarAggregation;
25use pyo3::prelude::*;
26
27use crate::common::{
28 consts::BYBIT_NAUTILUS_BROKER_ID,
29 parse::{bar_spec_to_bybit_interval, extract_raw_symbol},
30};
31
32#[pyfunction]
39#[pyo3(name = "extract_raw_symbol")]
40fn py_extract_raw_symbol(symbol: &str) -> &str {
41 extract_raw_symbol(symbol)
42}
43
44#[pyfunction]
50#[pyo3(name = "bar_spec_to_bybit_interval")]
51fn py_bar_spec_to_bybit_interval(aggregation: u8, step: u64) -> PyResult<String> {
52 let aggregation = BarAggregation::from_repr(aggregation as usize).ok_or_else(|| {
53 pyo3::exceptions::PyValueError::new_err(format!(
54 "Invalid BarAggregation value: {aggregation}"
55 ))
56 })?;
57 bar_spec_to_bybit_interval(aggregation, step).map_err(to_pyvalue_err)
58}
59
60#[pymodule]
66#[rustfmt::skip]
67pub fn bybit(_: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
68 m.add(stringify!(BYBIT_NAUTILUS_BROKER_ID), BYBIT_NAUTILUS_BROKER_ID)?;
69 m.add_class::<crate::common::enums::BybitAccountType>()?;
70 m.add_class::<crate::common::enums::BybitMarginMode>()?;
71 m.add_class::<crate::common::enums::BybitPositionMode>()?;
72 m.add_class::<crate::common::enums::BybitProductType>()?;
73 m.add_class::<crate::common::enums::BybitEnvironment>()?;
74 m.add_class::<crate::http::client::BybitHttpClient>()?;
75 m.add_class::<crate::http::models::BybitTickerData>()?;
76 m.add_class::<crate::websocket::client::BybitWebSocketClient>()?;
77 m.add_class::<crate::websocket::messages::BybitWebSocketError>()?;
78 m.add_function(wrap_pyfunction!(urls::py_get_bybit_http_base_url, m)?)?;
79 m.add_function(wrap_pyfunction!(urls::py_get_bybit_ws_url_public, m)?)?;
80 m.add_function(wrap_pyfunction!(urls::py_get_bybit_ws_url_private, m)?)?;
81 m.add_function(wrap_pyfunction!(urls::py_get_bybit_ws_url_trade, m)?)?;
82 m.add_function(wrap_pyfunction!(py_extract_raw_symbol, m)?)?;
83 m.add_function(wrap_pyfunction!(py_bar_spec_to_bybit_interval, m)?)?;
84 Ok(())
85}