Skip to content

Commit 5dc78b7

Browse files
committed
update extract_argument to use Bound APIs
1 parent 99f3230 commit 5dc78b7

File tree

13 files changed

+334
-125
lines changed

13 files changed

+334
-125
lines changed

guide/src/class.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,7 +1131,7 @@ impl<'a, 'py> pyo3::impl_::extract_argument::PyFunctionArgument<'a, 'py> for &'a
11311131
type Holder = ::std::option::Option<pyo3::PyRef<'py, MyClass>>;
11321132

11331133
#[inline]
1134-
fn extract(obj: &'py pyo3::PyAny, holder: &'a mut Self::Holder) -> pyo3::PyResult<Self> {
1134+
fn extract(obj: pyo3::impl_::extract_argument::PyArg<'py>, holder: &'a mut Self::Holder) -> pyo3::PyResult<Self> {
11351135
pyo3::impl_::extract_argument::extract_pyclass_ref(obj, holder)
11361136
}
11371137
}
@@ -1141,7 +1141,7 @@ impl<'a, 'py> pyo3::impl_::extract_argument::PyFunctionArgument<'a, 'py> for &'a
11411141
type Holder = ::std::option::Option<pyo3::PyRefMut<'py, MyClass>>;
11421142

11431143
#[inline]
1144-
fn extract(obj: &'py pyo3::PyAny, holder: &'a mut Self::Holder) -> pyo3::PyResult<Self> {
1144+
fn extract(obj: pyo3::impl_::extract_argument::PyArg<'py>, holder: &'a mut Self::Holder) -> pyo3::PyResult<Self> {
11451145
pyo3::impl_::extract_argument::extract_pyclass_ref_mut(obj, holder)
11461146
}
11471147
}

pyo3-macros-backend/src/method.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ impl SelfType {
191191
});
192192
error_mode.handle_error(quote_spanned! { *span =>
193193
_pyo3::impl_::extract_argument::#method::<#cls>(
194-
#py.from_borrowed_ptr::<_pyo3::PyAny>(#slf),
194+
_pyo3::impl_::extract_argument::PyArg::from_gil_ref(#py.from_borrowed_ptr::<_pyo3::PyAny>(#slf)),
195195
&mut #holder,
196196
)
197197
})

pyo3-macros-backend/src/params.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ pub fn impl_arg_params(
4444
.collect::<Result<_>>()?;
4545
return Ok((
4646
quote! {
47-
let _args = py.from_borrowed_ptr::<_pyo3::types::PyTuple>(_args);
48-
let _kwargs: ::std::option::Option<&_pyo3::types::PyDict> = py.from_borrowed_ptr_or_opt(_kwargs);
47+
let _args = _pyo3::impl_::extract_argument::PyArg::from_ptr(py, _args);
48+
let _kwargs = _pyo3::impl_::extract_argument::PyArg::from_ptr_or_opt(py, _kwargs);
4949
},
5050
arg_convert,
5151
));
@@ -132,7 +132,7 @@ pub fn impl_arg_params(
132132
keyword_only_parameters: &[#(#keyword_only_parameters),*],
133133
};
134134
let mut #args_array = [::std::option::Option::None; #num_params];
135-
let (_args, _kwargs) = #extract_expression;
135+
let (_args, _kwargs) = &#extract_expression;
136136
},
137137
param_conversion,
138138
))
@@ -180,7 +180,8 @@ fn impl_arg_param(
180180
let holder = push_holder();
181181
return Ok(quote_arg_span! {
182182
_pyo3::impl_::extract_argument::extract_argument(
183-
_args,
183+
#[allow(clippy::useless_conversion)]
184+
::std::convert::From::from(_args),
184185
&mut #holder,
185186
#name_str
186187
)?
@@ -193,7 +194,8 @@ fn impl_arg_param(
193194
let holder = push_holder();
194195
return Ok(quote_arg_span! {
195196
_pyo3::impl_::extract_argument::extract_optional_argument(
196-
_kwargs.map(::std::convert::AsRef::as_ref),
197+
#[allow(clippy::useless_conversion, clippy::redundant_closure)]
198+
_kwargs.as_ref().map(|kwargs| ::std::convert::From::from(kwargs)),
197199
&mut #holder,
198200
#name_str,
199201
|| ::std::option::Option::None

pyo3-macros-backend/src/pyclass.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,7 @@ impl<'a> PyClassImplsBuilder<'a> {
835835
type Holder = ::std::option::Option<_pyo3::PyRef<'py, #cls>>;
836836

837837
#[inline]
838-
fn extract(obj: &'py _pyo3::PyAny, holder: &'a mut Self::Holder) -> _pyo3::PyResult<Self> {
838+
fn extract(obj: _pyo3::impl_::extract_argument::PyArg<'py>, holder: &'a mut Self::Holder) -> _pyo3::PyResult<Self> {
839839
_pyo3::impl_::extract_argument::extract_pyclass_ref(obj, holder)
840840
}
841841
}
@@ -847,7 +847,7 @@ impl<'a> PyClassImplsBuilder<'a> {
847847
type Holder = ::std::option::Option<_pyo3::PyRef<'py, #cls>>;
848848

849849
#[inline]
850-
fn extract(obj: &'py _pyo3::PyAny, holder: &'a mut Self::Holder) -> _pyo3::PyResult<Self> {
850+
fn extract(obj: _pyo3::impl_::extract_argument::PyArg<'py>, holder: &'a mut Self::Holder) -> _pyo3::PyResult<Self> {
851851
_pyo3::impl_::extract_argument::extract_pyclass_ref(obj, holder)
852852
}
853853
}
@@ -857,7 +857,7 @@ impl<'a> PyClassImplsBuilder<'a> {
857857
type Holder = ::std::option::Option<_pyo3::PyRefMut<'py, #cls>>;
858858

859859
#[inline]
860-
fn extract(obj: &'py _pyo3::PyAny, holder: &'a mut Self::Holder) -> _pyo3::PyResult<Self> {
860+
fn extract(obj: _pyo3::impl_::extract_argument::PyArg<'py>, holder: &'a mut Self::Holder) -> _pyo3::PyResult<Self> {
861861
_pyo3::impl_::extract_argument::extract_pyclass_ref_mut(obj, holder)
862862
}
863863
}

pyo3-macros-backend/src/pymethod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,7 @@ fn extract_object(
996996
});
997997
extract_error_mode.handle_error(quote! {
998998
_pyo3::impl_::extract_argument::extract_argument(
999-
#source,
999+
_pyo3::impl_::extract_argument::PyArg::from_gil_ref(#source),
10001000
&mut #holder,
10011001
#name
10021002
)

pyo3-macros-backend/src/quotes.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub(crate) fn ok_wrap(obj: TokenStream) -> TokenStream {
1616

1717
pub(crate) fn map_result_into_ptr(result: TokenStream) -> TokenStream {
1818
quote! {
19-
_pyo3::impl_::wrap::map_result_into_ptr(py, #result)
19+
let result = _pyo3::impl_::wrap::map_result_into_ptr(py, #result);
20+
result
2021
}
2122
}

pytests/src/pyfunctions.rs

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,62 +4,66 @@ use pyo3::types::{PyDict, PyTuple};
44
#[pyfunction(signature = ())]
55
fn none() {}
66

7+
type Any<'py> = Bound<'py, PyAny>;
8+
type Dict<'py> = Bound<'py, PyDict>;
9+
type Tuple<'py> = Bound<'py, PyTuple>;
10+
711
#[pyfunction(signature = (a, b = None, *, c = None))]
8-
fn simple<'a>(
9-
a: &'a PyAny,
10-
b: Option<&'a PyAny>,
11-
c: Option<&'a PyAny>,
12-
) -> (&'a PyAny, Option<&'a PyAny>, Option<&'a PyAny>) {
12+
fn simple<'py>(
13+
a: Any<'py>,
14+
b: Option<Any<'py>>,
15+
c: Option<Any<'py>>,
16+
) -> (Any<'py>, Option<Any<'py>>, Option<Any<'py>>) {
1317
(a, b, c)
1418
}
1519

1620
#[pyfunction(signature = (a, b = None, *args, c = None))]
17-
fn simple_args<'a>(
18-
a: &'a PyAny,
19-
b: Option<&'a PyAny>,
20-
args: &'a PyTuple,
21-
c: Option<&'a PyAny>,
22-
) -> (&'a PyAny, Option<&'a PyAny>, &'a PyTuple, Option<&'a PyAny>) {
21+
fn simple_args<'py>(
22+
a: Any<'py>,
23+
b: Option<Any<'py>>,
24+
args: Tuple<'py>,
25+
c: Option<Any<'py>>,
26+
) -> (Any<'py>, Option<Any<'py>>, Tuple<'py>, Option<Any<'py>>) {
2327
(a, b, args, c)
2428
}
2529

2630
#[pyfunction(signature = (a, b = None, c = None, **kwargs))]
27-
fn simple_kwargs<'a>(
28-
a: &'a PyAny,
29-
b: Option<&'a PyAny>,
30-
c: Option<&'a PyAny>,
31-
kwargs: Option<&'a PyDict>,
31+
fn simple_kwargs<'py>(
32+
a: Any<'py>,
33+
b: Option<Any<'py>>,
34+
c: Option<Any<'py>>,
35+
kwargs: Option<Dict<'py>>,
3236
) -> (
33-
&'a PyAny,
34-
Option<&'a PyAny>,
35-
Option<&'a PyAny>,
36-
Option<&'a PyDict>,
37+
Any<'py>,
38+
Option<Any<'py>>,
39+
Option<Any<'py>>,
40+
Option<Dict<'py>>,
3741
) {
3842
(a, b, c, kwargs)
3943
}
4044

4145
#[pyfunction(signature = (a, b = None, *args, c = None, **kwargs))]
42-
fn simple_args_kwargs<'a>(
43-
a: &'a PyAny,
44-
b: Option<&'a PyAny>,
45-
args: &'a PyTuple,
46-
c: Option<&'a PyAny>,
47-
kwargs: Option<&'a PyDict>,
46+
fn simple_args_kwargs<'py>(
47+
a: Any<'py>,
48+
b: Option<Any<'py>>,
49+
args: Tuple<'py>,
50+
c: Option<Any<'py>>,
51+
kwargs: Option<Dict<'py>>,
4852
) -> (
49-
&'a PyAny,
50-
Option<&'a PyAny>,
51-
&'a PyTuple,
52-
Option<&'a PyAny>,
53-
Option<&'a PyDict>,
53+
Any<'py>,
54+
Option<Any<'py>>,
55+
Tuple<'py>,
56+
Option<Any<'py>>,
57+
Option<Dict<'py>>,
5458
) {
5559
(a, b, args, c, kwargs)
5660
}
5761

5862
#[pyfunction(signature = (*args, **kwargs))]
59-
fn args_kwargs<'a>(
60-
args: &'a PyTuple,
61-
kwargs: Option<&'a PyDict>,
62-
) -> (&'a PyTuple, Option<&'a PyDict>) {
63+
fn args_kwargs<'py>(
64+
args: Tuple<'py>,
65+
kwargs: Option<Dict<'py>>,
66+
) -> (Tuple<'py>, Option<Dict<'py>>) {
6367
(args, kwargs)
6468
}
6569

src/err/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@ impl PyErrArguments for PyDowncastErrorArguments {
809809
}
810810

811811
/// Convert `PyDowncastError` to Python `TypeError`.
812-
impl<'a> std::convert::From<PyDowncastError<'a>> for PyErr {
812+
impl std::convert::From<PyDowncastError<'_>> for PyErr {
813813
fn from(err: PyDowncastError<'_>) -> PyErr {
814814
let args = PyDowncastErrorArguments {
815815
from: err.from.get_type().into(),
@@ -820,9 +820,9 @@ impl<'a> std::convert::From<PyDowncastError<'a>> for PyErr {
820820
}
821821
}
822822

823-
impl<'a> std::error::Error for PyDowncastError<'a> {}
823+
impl std::error::Error for PyDowncastError<'_> {}
824824

825-
impl<'a> std::fmt::Display for PyDowncastError<'a> {
825+
impl std::fmt::Display for PyDowncastError<'_> {
826826
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
827827
display_downcast_error(f, &self.from.as_borrowed(), &self.to)
828828
}

0 commit comments

Comments
 (0)