Path: blob/main/crates/polars-python/src/io/sink_options.rs
8396 views
use std::sync::Arc;12use polars::prelude::sync_on_close::SyncOnCloseType;3use polars::prelude::{CloudScheme, UnifiedSinkArgs};4use pyo3::prelude::*;56use crate::io::cloud_options::OptPyCloudOptions;7use crate::prelude::Wrap;89/// Interface to `class SinkOptions` on the Python side10pub struct PySinkOptions<'py>(Bound<'py, PyAny>);1112impl<'a, 'py> FromPyObject<'a, 'py> for PySinkOptions<'py> {13type Error = PyErr;1415fn extract(ob: Borrowed<'a, 'py, PyAny>) -> PyResult<Self> {16Ok(Self(ob.to_owned()))17}18}1920impl PySinkOptions<'_> {21pub fn extract_unified_sink_args(22&self,23cloud_scheme: Option<CloudScheme>,24) -> PyResult<UnifiedSinkArgs> {25#[derive(FromPyObject)]26struct Extract<'a> {27mkdir: bool,28maintain_order: bool,29sync_on_close: Option<Wrap<SyncOnCloseType>>,30storage_options: OptPyCloudOptions<'a>,31credential_provider: Option<Py<PyAny>>,32}3334let Extract {35mkdir,36maintain_order,37sync_on_close,38storage_options,39credential_provider,40} = self.0.extract()?;4142let cloud_options =43storage_options.extract_opt_cloud_options(cloud_scheme, credential_provider)?;4445let sync_on_close = sync_on_close.map_or(SyncOnCloseType::default(), |x| x.0);4647let unified_sink_args = UnifiedSinkArgs {48mkdir,49maintain_order,50sync_on_close,51cloud_options: cloud_options.map(Arc::new),52};5354Ok(unified_sink_args)55}56}575859