nautilus_core/python/
mod.rs1pub mod casing;
19pub mod datetime;
20pub mod serialization;
21pub mod uuid;
22pub mod version;
23
24use pyo3::{
25 exceptions::{PyRuntimeError, PyTypeError, PyValueError},
26 prelude::*,
27 types::PyString,
28 wrap_pyfunction,
29};
30
31use crate::{
32 consts::{NAUTILUS_VERSION, USER_AGENT},
33 datetime::{
34 MILLISECONDS_IN_SECOND, NANOSECONDS_IN_MICROSECOND, NANOSECONDS_IN_MILLISECOND,
35 NANOSECONDS_IN_SECOND,
36 },
37 UUID4,
38};
39
40pub fn get_pytype_name<'py>(obj: &Bound<'py, PyAny>) -> PyResult<Bound<'py, PyString>> {
46 obj.get_type().name()
47}
48
49pub fn to_pyvalue_err(e: impl std::fmt::Display) -> PyErr {
55 PyValueError::new_err(e.to_string())
56}
57
58pub fn to_pytype_err(e: impl std::fmt::Display) -> PyErr {
64 PyTypeError::new_err(e.to_string())
65}
66
67pub fn to_pyruntime_err(e: impl std::fmt::Display) -> PyErr {
73 PyRuntimeError::new_err(e.to_string())
74}
75
76#[pymodule]
82#[rustfmt::skip]
83pub fn core(_: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
84 m.add(stringify!(NAUTILUS_VERSION), NAUTILUS_VERSION)?;
85 m.add(stringify!(USER_AGENT), USER_AGENT)?;
86 m.add(stringify!(MILLISECONDS_IN_SECOND), MILLISECONDS_IN_SECOND)?;
87 m.add(stringify!(NANOSECONDS_IN_SECOND), NANOSECONDS_IN_SECOND)?;
88 m.add(stringify!(NANOSECONDS_IN_MILLISECOND), NANOSECONDS_IN_MILLISECOND)?;
89 m.add(stringify!(NANOSECONDS_IN_MICROSECOND), NANOSECONDS_IN_MICROSECOND)?;
90 m.add_class::<UUID4>()?;
91 m.add_function(wrap_pyfunction!(casing::py_convert_to_snake_case, m)?)?;
92 m.add_function(wrap_pyfunction!(datetime::py_secs_to_nanos, m)?)?;
93 m.add_function(wrap_pyfunction!(datetime::py_secs_to_millis, m)?)?;
94 m.add_function(wrap_pyfunction!(datetime::py_millis_to_nanos, m)?)?;
95 m.add_function(wrap_pyfunction!(datetime::py_micros_to_nanos, m)?)?;
96 m.add_function(wrap_pyfunction!(datetime::py_nanos_to_secs, m)?)?;
97 m.add_function(wrap_pyfunction!(datetime::py_nanos_to_millis, m)?)?;
98 m.add_function(wrap_pyfunction!(datetime::py_nanos_to_micros, m)?)?;
99 m.add_function(wrap_pyfunction!(datetime::py_unix_nanos_to_iso8601, m)?)?;
100 m.add_function(wrap_pyfunction!(datetime::py_last_weekday_nanos, m)?)?;
101 m.add_function(wrap_pyfunction!(datetime::py_is_within_last_24_hours, m)?)?;
102 Ok(())
103}