polars_python/lazyframe/
mod.rs

1mod exitable;
2#[cfg(feature = "pymethods")]
3mod general;
4mod optflags;
5#[cfg(feature = "pymethods")]
6mod serde;
7mod sink;
8pub mod visit;
9pub mod visitor;
10
11#[cfg(not(target_arch = "wasm32"))]
12pub use exitable::PyInProcessQuery;
13use parking_lot::RwLock;
14use polars::prelude::{Engine, LazyFrame, OptFlags};
15use pyo3::exceptions::PyValueError;
16use pyo3::pybacked::PyBackedStr;
17use pyo3::types::PyAnyMethods;
18use pyo3::{Bound, FromPyObject, PyAny, PyResult, pyclass};
19pub use sink::{PyPartitioning, SinkTarget};
20
21use crate::prelude::Wrap;
22
23#[pyclass(frozen)]
24#[repr(transparent)]
25pub struct PyLazyFrame {
26    pub ldf: RwLock<LazyFrame>,
27}
28
29impl Clone for PyLazyFrame {
30    fn clone(&self) -> Self {
31        Self {
32            ldf: RwLock::new(self.ldf.read().clone()),
33        }
34    }
35}
36
37impl From<LazyFrame> for PyLazyFrame {
38    fn from(ldf: LazyFrame) -> Self {
39        PyLazyFrame {
40            ldf: RwLock::new(ldf),
41        }
42    }
43}
44
45impl From<PyLazyFrame> for LazyFrame {
46    fn from(pldf: PyLazyFrame) -> Self {
47        pldf.ldf.into_inner()
48    }
49}
50
51#[pyclass(frozen)]
52#[repr(transparent)]
53pub struct PyOptFlags {
54    pub inner: RwLock<OptFlags>,
55}
56
57impl Clone for PyOptFlags {
58    fn clone(&self) -> Self {
59        Self {
60            inner: RwLock::new(*self.inner.read()),
61        }
62    }
63}
64
65impl From<OptFlags> for PyOptFlags {
66    fn from(inner: OptFlags) -> Self {
67        PyOptFlags {
68            inner: RwLock::new(inner),
69        }
70    }
71}
72
73impl<'py> FromPyObject<'py> for Wrap<Engine> {
74    fn extract_bound(ob: &Bound<'py, PyAny>) -> PyResult<Self> {
75        let parsed = ob
76            .extract::<PyBackedStr>()?
77            .parse()
78            .map_err(PyValueError::new_err)?;
79        Ok(Wrap(parsed))
80    }
81}