Path: blob/main/crates/polars-python/src/lazyframe/sink.rs
8398 views
use std::sync::{Arc, Mutex};12use polars::prelude::file_provider::FileProviderReturn;3use polars::prelude::sync_on_close::SyncOnCloseType;4use polars::prelude::{PlRefPath, SpecialEq};5use polars_error::polars_err;6use pyo3::exceptions::PyValueError;7use pyo3::prelude::*;8use pyo3::pybacked::PyBackedStr;910use crate::prelude::Wrap;11use crate::utils::to_py_err;1213impl<'a, 'py> FromPyObject<'a, 'py> for Wrap<polars_plan::dsl::SinkTarget> {14type Error = PyErr;1516fn extract(ob: Borrowed<'a, 'py, PyAny>) -> PyResult<Self> {17if let Ok(v) = ob.extract::<PyBackedStr>() {18Ok(Wrap(polars::prelude::SinkTarget::Path(PlRefPath::new(&*v))))19} else {20let writer = Python::attach(|py| {21let py_f = ob.to_owned();22PyResult::Ok(23crate::file::try_get_pyfile(py, py_f, true)?24.025.into_writeable(),26)27})?;2829Ok(Wrap(polars_plan::prelude::SinkTarget::Dyn(SpecialEq::new(30Arc::new(Mutex::new(Some(writer))),31))))32}33}34}3536impl<'a, 'py> FromPyObject<'a, 'py> for Wrap<FileProviderReturn> {37type Error = PyErr;3839fn extract(ob: Borrowed<'a, 'py, PyAny>) -> PyResult<Self> {40if let Ok(v) = ob.extract::<PyBackedStr>() {41Ok(Wrap(FileProviderReturn::Path(v.to_string())))42} else if let Ok(v) = ob.extract::<std::path::PathBuf>() {43Ok(Wrap(FileProviderReturn::Path(44v.to_str()45.ok_or_else(|| to_py_err(polars_err!(non_utf8_path)))?46.to_string(),47)))48} else {49let py = ob.py();5051let writeable = crate::file::try_get_pyfile(py, ob.to_owned(), true)?52.053.into_writeable();5455Ok(Wrap(FileProviderReturn::Writeable(writeable)))56}57}58}5960impl<'a, 'py> FromPyObject<'a, 'py> for Wrap<SyncOnCloseType> {61type Error = PyErr;6263fn extract(ob: Borrowed<'a, 'py, PyAny>) -> PyResult<Self> {64let parsed = match &*ob.extract::<PyBackedStr>()? {65"none" => SyncOnCloseType::None,66"data" => SyncOnCloseType::Data,67"all" => SyncOnCloseType::All,68v => {69return Err(PyValueError::new_err(format!(70"`sync_on_close` must be one of {{'none', 'data', 'all'}}, got {v}",71)));72},73};74Ok(Wrap(parsed))75}76}777879