Skip to content

Commit b1776c7

Browse files
committed
chore: clippy pyo3 deprecations
Signed-off-by: Ion Koutsouris <[email protected]>
1 parent c3b8223 commit b1776c7

File tree

4 files changed

+59
-75
lines changed

4 files changed

+59
-75
lines changed

python/src/filesystem.rs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,11 @@ impl DeltaFileSystemHandler {
129129
paths: Vec<String>,
130130
py: Python<'py>,
131131
) -> PyResult<Vec<Bound<'py, PyAny>>> {
132-
let fs = PyModule::import_bound(py, "pyarrow.fs")?;
132+
let fs = PyModule::import(py, "pyarrow.fs")?;
133133
let file_types = fs.getattr("FileType")?;
134134

135135
let to_file_info = |loc: &str, type_: &Bound<'py, PyAny>, kwargs: &HashMap<&str, i64>| {
136-
fs.call_method(
137-
"FileInfo",
138-
(loc, type_),
139-
Some(&kwargs.into_py_dict_bound(py)),
140-
)
136+
fs.call_method("FileInfo", (loc, type_), Some(&kwargs.into_py_dict(py)?))
141137
};
142138

143139
let mut infos = Vec::new();
@@ -199,15 +195,11 @@ impl DeltaFileSystemHandler {
199195
recursive: bool,
200196
py: Python<'py>,
201197
) -> PyResult<Vec<Bound<'py, PyAny>>> {
202-
let fs = PyModule::import_bound(py, "pyarrow.fs")?;
198+
let fs = PyModule::import(py, "pyarrow.fs")?;
203199
let file_types = fs.getattr("FileType")?;
204200

205201
let to_file_info = |loc: String, type_: &Bound<'py, PyAny>, kwargs: HashMap<&str, i64>| {
206-
fs.call_method(
207-
"FileInfo",
208-
(loc, type_),
209-
Some(&kwargs.into_py_dict_bound(py)),
210-
)
202+
fs.call_method("FileInfo", (loc, type_), Some(&kwargs.into_py_dict(py)?))
211203
};
212204

213205
let path = Self::parse_path(&base_dir);
@@ -493,7 +485,7 @@ impl ObjectInputFile {
493485
// TODO: PyBytes copies the buffer. If we move away from the limited CPython
494486
// API (the stable C API), we could implement the buffer protocol for
495487
// bytes::Bytes and return this zero-copy.
496-
Ok(PyBytes::new_bound(py, data.as_ref()))
488+
Ok(PyBytes::new(py, data.as_ref()))
497489
}
498490

499491
fn fileno(&self) -> PyResult<()> {

python/src/lib.rs

Lines changed: 32 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ use crate::schema::{schema_to_pyobject, Field};
7474
use crate::utils::rt;
7575
use deltalake::operations::update_field_metadata::UpdateFieldMetadataBuilder;
7676
use pyo3::exceptions::{PyRuntimeError, PyValueError};
77-
use pyo3::prelude::*;
7877
use pyo3::pybacked::PyBackedStr;
7978
use pyo3::types::{PyCapsule, PyDict, PyFrozenSet};
79+
use pyo3::{prelude::*, IntoPyObjectExt};
8080
use serde_json::{Map, Value};
8181
use uuid::Uuid;
8282

@@ -1210,9 +1210,9 @@ impl RawDeltaTable {
12101210

12111211
let active_partitions = active_partitions
12121212
.into_iter()
1213-
.map(|part| PyFrozenSet::new_bound(py, part.iter()))
1213+
.map(|part| PyFrozenSet::new(py, part.iter()))
12141214
.collect::<Result<Vec<Bound<'py, _>>, PyErr>>()?;
1215-
PyFrozenSet::new_bound(py, &active_partitions)
1215+
PyFrozenSet::new(py, &active_partitions)
12161216
}
12171217

12181218
#[allow(clippy::too_many_arguments)]
@@ -1615,7 +1615,7 @@ impl RawDeltaTable {
16151615
let table = self.with_table(|t| Ok(Arc::new(t.clone())))?;
16161616
let provider = FFI_TableProvider::new(table, false, handle);
16171617

1618-
PyCapsule::new_bound(py, provider, Some(name.clone()))
1618+
PyCapsule::new(py, provider, Some(name.clone()))
16191619
}
16201620
}
16211621

@@ -1797,38 +1797,38 @@ fn scalar_to_py<'py>(value: &Scalar, py_date: &Bound<'py, PyAny>) -> PyResult<Bo
17971797
let py = py_date.py();
17981798
let val = match value {
17991799
Null(_) => py.None(),
1800-
Boolean(val) => val.to_object(py),
1801-
Binary(val) => val.to_object(py),
1802-
String(val) => val.to_object(py),
1803-
Byte(val) => val.to_object(py),
1804-
Short(val) => val.to_object(py),
1805-
Integer(val) => val.to_object(py),
1806-
Long(val) => val.to_object(py),
1807-
Float(val) => val.to_object(py),
1808-
Double(val) => val.to_object(py),
1800+
Boolean(val) => val.into_py_any(py)?,
1801+
Binary(val) => val.into_py_any(py)?,
1802+
String(val) => val.into_py_any(py)?,
1803+
Byte(val) => val.into_py_any(py)?,
1804+
Short(val) => val.into_py_any(py)?,
1805+
Integer(val) => val.into_py_any(py)?,
1806+
Long(val) => val.into_py_any(py)?,
1807+
Float(val) => val.into_py_any(py)?,
1808+
Double(val) => val.into_py_any(py)?,
18091809
Timestamp(_) => {
18101810
// We need to manually append 'Z' add to end so that pyarrow can cast the
18111811
// scalar value to pa.timestamp("us","UTC")
18121812
let value = value.serialize();
1813-
format!("{}Z", value).to_object(py)
1813+
format!("{}Z", value).into_py_any(py)?
18141814
}
18151815
TimestampNtz(_) => {
18161816
let value = value.serialize();
1817-
value.to_object(py)
1817+
value.into_py_any(py)?
18181818
}
18191819
// NOTE: PyArrow 13.0.0 lost the ability to cast from string to date32, so
18201820
// we have to implement that manually.
18211821
Date(_) => {
18221822
let date = py_date.call_method1("fromisoformat", (value.serialize(),))?;
1823-
date.to_object(py)
1823+
date.into_py_any(py)?
18241824
}
1825-
Decimal(_, _, _) => value.serialize().to_object(py),
1825+
Decimal(_, _, _) => value.serialize().into_py_any(py)?,
18261826
Struct(data) => {
1827-
let py_struct = PyDict::new_bound(py);
1827+
let py_struct = PyDict::new(py);
18281828
for (field, value) in data.fields().iter().zip(data.values().iter()) {
18291829
py_struct.set_item(field.name(), scalar_to_py(value, py_date)?)?;
18301830
}
1831-
py_struct.to_object(py)
1831+
py_struct.into_py_any(py)?
18321832
}
18331833
Array(_val) => todo!("how should this be converted!"),
18341834
};
@@ -1851,7 +1851,7 @@ fn scalar_to_py<'py>(value: &Scalar, py_date: &Bound<'py, PyAny>) -> PyResult<Bo
18511851
fn filestats_to_expression_next<'py>(
18521852
py: Python<'py>,
18531853
schema: &PyArrowType<ArrowSchema>,
1854-
stats_columns: &Vec<String>,
1854+
stats_columns: &[String],
18551855
file_info: LogicalFile<'_>,
18561856
) -> PyResult<Option<Bound<'py, PyAny>>> {
18571857
let ds = PyModule::import(py, "pyarrow.dataset")?;
@@ -2462,33 +2462,21 @@ fn _internal(m: &Bound<'_, PyModule>) -> PyResult<()> {
24622462
deltalake::unity_catalog::register_handlers(None);
24632463

24642464
let py = m.py();
2465-
m.add("DeltaError", py.get_type_bound::<DeltaError>())?;
2466-
m.add(
2467-
"CommitFailedError",
2468-
py.get_type_bound::<CommitFailedError>(),
2469-
)?;
2470-
m.add(
2471-
"DeltaProtocolError",
2472-
py.get_type_bound::<DeltaProtocolError>(),
2473-
)?;
2474-
m.add(
2475-
"TableNotFoundError",
2476-
py.get_type_bound::<TableNotFoundError>(),
2477-
)?;
2478-
m.add(
2479-
"SchemaMismatchError",
2480-
py.get_type_bound::<SchemaMismatchError>(),
2481-
)?;
2465+
m.add("DeltaError", py.get_type::<DeltaError>())?;
2466+
m.add("CommitFailedError", py.get_type::<CommitFailedError>())?;
2467+
m.add("DeltaProtocolError", py.get_type::<DeltaProtocolError>())?;
2468+
m.add("TableNotFoundError", py.get_type::<TableNotFoundError>())?;
2469+
m.add("SchemaMismatchError", py.get_type::<SchemaMismatchError>())?;
24822470

24832471
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("warn")).init();
24842472
m.add("__version__", env!("CARGO_PKG_VERSION"))?;
2485-
m.add_function(pyo3::wrap_pyfunction_bound!(rust_core_version, m)?)?;
2486-
m.add_function(pyo3::wrap_pyfunction_bound!(create_deltalake, m)?)?;
2487-
m.add_function(pyo3::wrap_pyfunction_bound!(write_new_deltalake, m)?)?;
2488-
m.add_function(pyo3::wrap_pyfunction_bound!(write_to_deltalake, m)?)?;
2489-
m.add_function(pyo3::wrap_pyfunction_bound!(convert_to_deltalake, m)?)?;
2490-
m.add_function(pyo3::wrap_pyfunction_bound!(batch_distinct, m)?)?;
2491-
m.add_function(pyo3::wrap_pyfunction_bound!(
2473+
m.add_function(pyo3::wrap_pyfunction!(rust_core_version, m)?)?;
2474+
m.add_function(pyo3::wrap_pyfunction!(create_deltalake, m)?)?;
2475+
m.add_function(pyo3::wrap_pyfunction!(write_new_deltalake, m)?)?;
2476+
m.add_function(pyo3::wrap_pyfunction!(write_to_deltalake, m)?)?;
2477+
m.add_function(pyo3::wrap_pyfunction!(convert_to_deltalake, m)?)?;
2478+
m.add_function(pyo3::wrap_pyfunction!(batch_distinct, m)?)?;
2479+
m.add_function(pyo3::wrap_pyfunction!(
24922480
get_num_idx_cols_and_stats_columns,
24932481
m
24942482
)?)?;

python/src/schema.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use deltalake::kernel::{
1111
PrimitiveType as DeltaPrimitve, StructField, StructType as DeltaStructType, StructTypeExt,
1212
};
1313
use pyo3::exceptions::{PyException, PyNotImplementedError, PyTypeError, PyValueError};
14-
use pyo3::prelude::*;
14+
use pyo3::{prelude::*, IntoPyObjectExt};
1515
use std::collections::HashMap;
1616

1717
use crate::utils::warn;
@@ -26,19 +26,19 @@ use crate::utils::warn;
2626
fn schema_type_to_python(schema_type: DataType, py: Python<'_>) -> PyResult<Bound<'_, PyAny>> {
2727
match schema_type {
2828
DataType::Primitive(data_type) => Ok((PrimitiveType::new(data_type.to_string())?)
29-
.into_py(py)
29+
.into_py_any(py)?
3030
.into_bound(py)),
3131
DataType::Array(array_type) => {
3232
let array_type: ArrayType = (*array_type).into();
33-
Ok(array_type.into_py(py).into_bound(py))
33+
Ok(array_type.into_py_any(py)?.into_bound(py))
3434
}
3535
DataType::Map(map_type) => {
3636
let map_type: MapType = (*map_type).into();
37-
Ok(map_type.into_py(py).into_bound(py))
37+
Ok(map_type.into_py_any(py)?.into_bound(py))
3838
}
3939
DataType::Struct(struct_type) => {
4040
let struct_type: StructType = (*struct_type).into();
41-
Ok(struct_type.into_py(py).into_bound(py))
41+
Ok(struct_type.into_py_any(py)?.into_bound(py))
4242
}
4343
}
4444
}
@@ -230,7 +230,11 @@ impl ArrayType {
230230

231231
#[getter]
232232
fn contains_null<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyAny>> {
233-
Ok(self.inner_type.contains_null().into_py(py).into_bound(py))
233+
Ok(self
234+
.inner_type
235+
.contains_null()
236+
.into_py_any(py)?
237+
.into_bound(py))
234238
}
235239

236240
#[pyo3(text_signature = "($self)")]
@@ -363,7 +367,7 @@ impl MapType {
363367
Ok(self
364368
.inner_type
365369
.value_contains_null()
366-
.into_py(py)
370+
.into_py_any(py)?
367371
.into_bound(py))
368372
}
369373

@@ -422,7 +426,7 @@ impl Field {
422426

423427
// Serialize and de-serialize JSON (it needs to be valid JSON anyways)
424428
let metadata: HashMap<String, serde_json::Value> = if let Some(json) = metadata {
425-
let json_dumps = PyModule::import_bound(py, "json")?.getattr("dumps")?;
429+
let json_dumps = PyModule::import(py, "json")?.getattr("dumps")?;
426430
let metadata_json: String = json_dumps.call1((json,))?.extract()?;
427431
let metadata_json = Some(metadata_json)
428432
.filter(|x| x != "null")
@@ -473,12 +477,12 @@ impl Field {
473477

474478
#[getter]
475479
fn metadata<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyAny>> {
476-
let json_loads = PyModule::import_bound(py, "json")?.getattr("loads")?;
480+
let json_loads = PyModule::import(py, "json")?.getattr("loads")?;
477481
let metadata_json: String = serde_json::to_string(self.inner.metadata())
478482
.map_err(|err| PyValueError::new_err(err.to_string()))?;
479483
Ok(json_loads
480484
.call1((metadata_json,))?
481-
.to_object(py)
485+
.into_py_any(py)?
482486
.bind(py)
483487
.to_owned())
484488
}
@@ -669,7 +673,7 @@ pub fn schema_to_pyobject(schema: DeltaStructType, py: Python<'_>) -> PyResult<B
669673
inner: field.clone(),
670674
});
671675

672-
let py_schema = PyModule::import_bound(py, "deltalake.schema")?.getattr("Schema")?;
676+
let py_schema = PyModule::import(py, "deltalake.schema")?.getattr("Schema")?;
673677

674678
py_schema.call1((fields.collect::<Vec<_>>(),))
675679
}
@@ -727,8 +731,8 @@ impl PySchema {
727731

728732
let super_ = self_.as_ref();
729733
let json = super_.to_json()?;
730-
let json_loads = PyModule::import_bound(py, "json")?.getattr("loads")?;
731-
json_loads.call1((json.into_py(py),))
734+
let json_loads = PyModule::import(py, "json")?.getattr("loads")?;
735+
json_loads.call1((json.into_pyobject(py)?,))
732736
}
733737

734738
#[pyo3(signature = (as_large_types = false))]

python/src/utils.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use deltalake::storage::{ListResult, ObjectStore, ObjectStoreError, ObjectStoreR
44
use futures::future::{join_all, BoxFuture, FutureExt};
55
use futures::StreamExt;
66
use pyo3::types::{IntoPyDict, PyAnyMethods, PyModule};
7-
use pyo3::{Bound, PyAny, PyResult, Python, ToPyObject};
7+
use pyo3::{Bound, IntoPyObjectExt, PyAny, PyResult, Python};
88
use tokio::runtime::Runtime;
99

1010
#[inline]
@@ -101,13 +101,13 @@ pub fn warn<'py>(
101101
message: &str,
102102
stack_level: Option<u8>,
103103
) -> PyResult<()> {
104-
let warnings_warn = PyModule::import_bound(py, "warnings")?.getattr("warn")?;
105-
let warning_type = PyModule::import_bound(py, "builtins")?.getattr(warning_type)?;
104+
let warnings_warn = PyModule::import(py, "warnings")?.getattr("warn")?;
105+
let warning_type = PyModule::import(py, "builtins")?.getattr(warning_type)?;
106106
let stack_level = stack_level.unwrap_or(1);
107107
let kwargs: [(&str, Bound<'py, PyAny>); 2] = [
108108
("category", warning_type),
109-
("stacklevel", stack_level.to_object(py).into_bound(py)),
109+
("stacklevel", stack_level.into_py_any(py)?.into_bound(py)),
110110
];
111-
warnings_warn.call((message,), Some(&kwargs.into_py_dict_bound(py)))?;
111+
warnings_warn.call((message,), Some(&kwargs.into_py_dict(py)?))?;
112112
Ok(())
113113
}

0 commit comments

Comments
 (0)