Skip to content

Commit b324e3a

Browse files
committed
make IntoPyDict::into_py_dict fallible
1 parent 50e4b38 commit b324e3a

33 files changed

+129
-83
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ fn main() -> PyResult<()> {
156156
let sys = py.import("sys")?;
157157
let version: String = sys.getattr("version")?.extract()?;
158158

159-
let locals = [("os", py.import("os")?)].into_py_dict(py);
159+
let locals = [("os", py.import("os")?)].into_py_dict(py)?;
160160
let code = c_str!("os.getenv('USER') or os.getenv('USERNAME') or 'Unknown'");
161161
let user: String = py.eval(code, None, Some(&locals))?.extract()?;
162162

guide/src/exception.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,18 @@ use pyo3::exceptions::PyException;
2323

2424
create_exception!(mymodule, CustomError, PyException);
2525

26+
# fn main() -> PyResult<()> {
2627
Python::with_gil(|py| {
27-
let ctx = [("CustomError", py.get_type::<CustomError>())].into_py_dict(py);
28+
let ctx = [("CustomError", py.get_type::<CustomError>())].into_py_dict(py)?;
2829
pyo3::py_run!(
2930
py,
3031
*ctx,
3132
"assert str(CustomError) == \"<class 'mymodule.CustomError'>\""
3233
);
3334
pyo3::py_run!(py, *ctx, "assert CustomError('oops').args == ('oops',)");
34-
});
35+
# Ok(())
36+
})
37+
# }
3538
```
3639

3740
When using PyO3 to create an extension module, you can add the new exception to

guide/src/module.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ fn func() -> String {
9090
# use pyo3::types::IntoPyDict;
9191
# use pyo3::ffi::c_str;
9292
# let parent_module = wrap_pymodule!(parent_module)(py);
93-
# let ctx = [("parent_module", parent_module)].into_py_dict(py);
93+
# let ctx = [("parent_module", parent_module)].into_py_dict(py).unwrap();
9494
#
9595
# py.run(c_str!("assert parent_module.child_module.func() == 'func'"), None, Some(&ctx)).unwrap();
9696
# })

guide/src/python-from-rust/calling-existing-code.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def leaky_relu(x, slope=0.01):
131131
let relu_result: f64 = activators.getattr("relu")?.call1((-1.0,))?.extract()?;
132132
assert_eq!(relu_result, 0.0);
133133

134-
let kwargs = [("slope", 0.2)].into_py_dict(py);
134+
let kwargs = [("slope", 0.2)].into_py_dict(py)?;
135135
let lrelu_result: f64 = activators
136136
.getattr("leaky_relu")?
137137
.call((-1.0,), Some(&kwargs))?

guide/src/python-from-rust/function-calls.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,17 @@ fn main() -> PyResult<()> {
9090
.into();
9191

9292
// call object with PyDict
93-
let kwargs = [(key1, val1)].into_py_dict(py);
93+
let kwargs = [(key1, val1)].into_py_dict(py)?;
9494
fun.call(py, (), Some(&kwargs))?;
9595

9696
// pass arguments as Vec
9797
let kwargs = vec![(key1, val1), (key2, val2)];
98-
fun.call(py, (), Some(&kwargs.into_py_dict(py)))?;
98+
fun.call(py, (), Some(&kwargs.into_py_dict(py)?))?;
9999

100100
// pass arguments as HashMap
101101
let mut kwargs = HashMap::<&str, i32>::new();
102102
kwargs.insert(key1, 1);
103-
fun.call(py, (), Some(&kwargs.into_py_dict(py)))?;
103+
fun.call(py, (), Some(&kwargs.into_py_dict(py)?))?;
104104

105105
Ok(())
106106
})

src/conversions/anyhow.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ mod test_anyhow {
145145
let pyerr = PyErr::from(err);
146146

147147
Python::with_gil(|py| {
148-
let locals = [("err", pyerr)].into_py_dict(py);
148+
let locals = [("err", pyerr)].into_py_dict(py).unwrap();
149149
let pyerr = py
150150
.run(ffi::c_str!("raise err"), None, Some(&locals))
151151
.unwrap_err();
@@ -164,7 +164,7 @@ mod test_anyhow {
164164
let pyerr = PyErr::from(err);
165165

166166
Python::with_gil(|py| {
167-
let locals = [("err", pyerr)].into_py_dict(py);
167+
let locals = [("err", pyerr)].into_py_dict(py).unwrap();
168168
let pyerr = py
169169
.run(ffi::c_str!("raise err"), None, Some(&locals))
170170
.unwrap_err();

src/conversions/chrono.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1365,7 +1365,7 @@ mod tests {
13651365
fn test_pyo3_offset_fixed_frompyobject_created_in_python(timestamp in 0..(i32::MAX as i64), timedelta in -86399i32..=86399i32) {
13661366
Python::with_gil(|py| {
13671367

1368-
let globals = [("datetime", py.import("datetime").unwrap())].into_py_dict(py);
1368+
let globals = [("datetime", py.import("datetime").unwrap())].into_py_dict(py).unwrap();
13691369
let code = format!("datetime.datetime.fromtimestamp({}).replace(tzinfo=datetime.timezone(datetime.timedelta(seconds={})))", timestamp, timedelta);
13701370
let t = py.eval(&CString::new(code).unwrap(), Some(&globals), None).unwrap();
13711371

src/conversions/eyre.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ mod tests {
151151
let pyerr = PyErr::from(err);
152152

153153
Python::with_gil(|py| {
154-
let locals = [("err", pyerr)].into_py_dict(py);
154+
let locals = [("err", pyerr)].into_py_dict(py).unwrap();
155155
let pyerr = py
156156
.run(ffi::c_str!("raise err"), None, Some(&locals))
157157
.unwrap_err();
@@ -170,7 +170,7 @@ mod tests {
170170
let pyerr = PyErr::from(err);
171171

172172
Python::with_gil(|py| {
173-
let locals = [("err", pyerr)].into_py_dict(py);
173+
let locals = [("err", pyerr)].into_py_dict(py).unwrap();
174174
let pyerr = py
175175
.run(ffi::c_str!("raise err"), None, Some(&locals))
176176
.unwrap_err();

src/conversions/hashbrown.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use crate::{
2525
set::{new_from_iter, try_new_from_iter, PySetMethods},
2626
PyDict, PyFrozenSet, PySet,
2727
},
28-
Bound, BoundObject, FromPyObject, IntoPy, PyAny, PyErr, PyObject, PyResult, Python, ToPyObject,
28+
Bound, FromPyObject, IntoPy, PyAny, PyErr, PyObject, PyResult, Python, ToPyObject,
2929
};
3030
use std::{cmp, hash};
3131

@@ -238,7 +238,7 @@ mod tests {
238238
let mut map = hashbrown::HashMap::<i32, i32>::new();
239239
map.insert(1, 1);
240240

241-
let py_map = map.into_py_dict(py);
241+
let py_map = map.into_py_dict(py).unwrap();
242242

243243
assert_eq!(py_map.len(), 1);
244244
assert_eq!(

src/conversions/indexmap.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ mod test_indexmap {
236236
let mut map = indexmap::IndexMap::<i32, i32>::new();
237237
map.insert(1, 1);
238238

239-
let py_map = map.into_py_dict(py);
239+
let py_map = map.into_py_dict(py).unwrap();
240240

241241
assert_eq!(py_map.len(), 1);
242242
assert_eq!(
@@ -265,7 +265,7 @@ mod test_indexmap {
265265
}
266266
}
267267

268-
let py_map = map.clone().into_py_dict(py);
268+
let py_map = map.clone().into_py_dict(py).unwrap();
269269

270270
let trip_map = py_map.extract::<indexmap::IndexMap<i32, i32>>().unwrap();
271271

0 commit comments

Comments
 (0)