nautilus_core/python/
mod.rs1pub mod casing;
19pub mod datetime;
20pub mod serialization;
21pub mod uuid;
22pub mod version;
23
24use pyo3::{
25 conversion::IntoPyObjectExt,
26 exceptions::{PyRuntimeError, PyTypeError, PyValueError},
27 prelude::*,
28 types::PyString,
29 wrap_pyfunction,
30};
31
32use crate::{
33 UUID4,
34 consts::{NAUTILUS_VERSION, USER_AGENT},
35 datetime::{
36 MILLISECONDS_IN_SECOND, NANOSECONDS_IN_MICROSECOND, NANOSECONDS_IN_MILLISECOND,
37 NANOSECONDS_IN_SECOND,
38 },
39};
40
41pub trait IntoPyObjectNautilusExt<'py>: IntoPyObjectExt<'py> {
43 #[inline]
44 fn into_py_any_unwrap(self, py: Python<'py>) -> PyObject {
45 self.into_py_any(py)
46 .expect("Failed to convert type to PyObject")
47 }
48}
49
50impl<'py, T> IntoPyObjectNautilusExt<'py> for T where T: IntoPyObjectExt<'py> {}
51
52pub fn get_pytype_name<'py>(obj: &Bound<'py, PyAny>) -> PyResult<Bound<'py, PyString>> {
58 obj.get_type().name()
59}
60
61pub fn to_pyvalue_err(e: impl std::fmt::Display) -> PyErr {
67 PyValueError::new_err(e.to_string())
68}
69
70pub fn to_pytype_err(e: impl std::fmt::Display) -> PyErr {
76 PyTypeError::new_err(e.to_string())
77}
78
79pub fn to_pyruntime_err(e: impl std::fmt::Display) -> PyErr {
85 PyRuntimeError::new_err(e.to_string())
86}
87
88#[pymodule]
94#[rustfmt::skip]
95pub fn core(_: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
96 m.add(stringify!(NAUTILUS_VERSION), NAUTILUS_VERSION)?;
97 m.add(stringify!(USER_AGENT), USER_AGENT)?;
98 m.add(stringify!(MILLISECONDS_IN_SECOND), MILLISECONDS_IN_SECOND)?;
99 m.add(stringify!(NANOSECONDS_IN_SECOND), NANOSECONDS_IN_SECOND)?;
100 m.add(stringify!(NANOSECONDS_IN_MILLISECOND), NANOSECONDS_IN_MILLISECOND)?;
101 m.add(stringify!(NANOSECONDS_IN_MICROSECOND), NANOSECONDS_IN_MICROSECOND)?;
102 m.add_class::<UUID4>()?;
103 m.add_function(wrap_pyfunction!(casing::py_convert_to_snake_case, m)?)?;
104 m.add_function(wrap_pyfunction!(datetime::py_secs_to_nanos, m)?)?;
105 m.add_function(wrap_pyfunction!(datetime::py_secs_to_millis, m)?)?;
106 m.add_function(wrap_pyfunction!(datetime::py_millis_to_nanos, m)?)?;
107 m.add_function(wrap_pyfunction!(datetime::py_micros_to_nanos, m)?)?;
108 m.add_function(wrap_pyfunction!(datetime::py_nanos_to_secs, m)?)?;
109 m.add_function(wrap_pyfunction!(datetime::py_nanos_to_millis, m)?)?;
110 m.add_function(wrap_pyfunction!(datetime::py_nanos_to_micros, m)?)?;
111 m.add_function(wrap_pyfunction!(datetime::py_unix_nanos_to_iso8601, m)?)?;
112 m.add_function(wrap_pyfunction!(datetime::py_last_weekday_nanos, m)?)?;
113 m.add_function(wrap_pyfunction!(datetime::py_is_within_last_24_hours, m)?)?;
114 Ok(())
115}