Path: blob/main/crates/polars-python/src/io/sink_options.rs
7889 views
use std::sync::Arc;12use polars::prelude::sync_on_close::SyncOnCloseType;3use polars::prelude::{CloudScheme, UnifiedSinkArgs};4use pyo3::types::PyAnyMethods;5use pyo3::{Bound, FromPyObject, Py, PyAny, PyResult};67use crate::functions::parse_cloud_options;8use crate::prelude::Wrap;910/// Interface to `class SinkOptions` on the Python side11pub struct PySinkOptions<'py>(Bound<'py, pyo3::PyAny>);1213impl<'py> FromPyObject<'py> for PySinkOptions<'py> {14fn extract_bound(ob: &Bound<'py, pyo3::PyAny>) -> pyo3::PyResult<Self> {15Ok(Self(ob.clone()))16}17}1819impl PySinkOptions<'_> {20pub fn extract_unified_sink_args(21&self,22cloud_scheme: Option<CloudScheme>,23) -> PyResult<UnifiedSinkArgs> {24#[derive(FromPyObject)]25struct Extract {26mkdir: bool,27maintain_order: bool,28sync_on_close: Option<Wrap<SyncOnCloseType>>,29storage_options: Option<Vec<(String, String)>>,30credential_provider: Option<Py<PyAny>>,31retries: usize,32}3334let Extract {35mkdir,36maintain_order,37sync_on_close,38storage_options,39credential_provider,40retries,41} = self.0.extract()?;4243let cloud_options =44parse_cloud_options(cloud_scheme, storage_options, credential_provider, retries)?;4546let sync_on_close = sync_on_close.map_or(SyncOnCloseType::default(), |x| x.0);4748let unified_sink_args = UnifiedSinkArgs {49mkdir,50maintain_order,51sync_on_close,52cloud_options: cloud_options.map(Arc::new),53};5455Ok(unified_sink_args)56}57}585960