Skip to content

Commit 06cd7c7

Browse files
committed
Fix some more docs.
1 parent e65b849 commit 06cd7c7

File tree

2 files changed

+62
-21
lines changed

2 files changed

+62
-21
lines changed

guide/src/function.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,7 @@ use pyo3::wrap_pyfunction;
200200
use pyo3::prelude::*;
201201

202202
#[pyfunction(pass_module)]
203-
fn pyfunction_with_module(
204-
module: &PyModule
205-
) -> PyResult<&str> {
203+
fn pyfunction_with_module(module: &PyModule) -> PyResult<&str> {
206204
module.name()
207205
}
208206

src/types/module.rs

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -185,15 +185,28 @@ impl PyModule {
185185
/// Use this together with the`#[pyfunction]` and [wrap_pyfunction!] or `#[pymodule]` and
186186
/// [wrap_pymodule!].
187187
///
188-
/// ```rust,ignore
189-
/// m.add_wrapped(wrap_pyfunction!(double));
190-
/// m.add_wrapped(wrap_pymodule!(utils));
188+
/// ```rust
189+
/// use pyo3::prelude::*;
190+
/// #[pymodule]
191+
/// fn utils(_py: Python, _module: &PyModule) -> PyResult<()> {
192+
/// Ok(())
193+
/// }
194+
///
195+
/// #[pyfunction]
196+
/// fn double(x: usize) -> usize {
197+
/// x * 2
198+
/// }
199+
/// #[pymodule]
200+
/// fn top_level(_py: Python, module: &PyModule) -> PyResult<()> {
201+
/// module.add_wrapped(pyo3::wrap_pymodule!(utils))?;
202+
/// module.add_wrapped(pyo3::wrap_pyfunction!(double))
203+
/// }
191204
/// ```
192205
///
193206
/// You can also add a function with a custom name using [add](PyModule::add):
194207
///
195208
/// ```rust,ignore
196-
/// m.add("also_double", wrap_pyfunction!(double)(py));
209+
/// m.add("also_double", wrap_pyfunction!(double)(m)?)?;
197210
/// ```
198211
///
199212
/// **This function will be deprecated in the next release. Please use the specific
@@ -202,43 +215,73 @@ impl PyModule {
202215
where
203216
T: IntoPyCallbackOutput<PyObject>,
204217
{
205-
let function = wrapper(self.py()).convert(self.py())?;
206-
let name = function.getattr(self.py(), "__name__")?;
207-
self.add(name.extract(self.py())?, function)
218+
let py = self.py();
219+
let function = wrapper(py).convert(py)?;
220+
let name = function.getattr(py, "__name__")?;
221+
let name = name.extract(py)?;
222+
self.add(name, function)
208223
}
209224

210225
/// Add a submodule to a module.
211226
///
212227
/// Use this together with `#[pymodule]` and [wrap_pymodule!].
213228
///
214-
/// ```rust,ignore
215-
/// m.add_submodule(wrap_pymodule!(utils));
229+
/// ```rust
230+
/// use pyo3::prelude::*;
231+
/// #[pymodule]
232+
/// fn utils(_py: Python, _module: &PyModule) -> PyResult<()> {
233+
/// Ok(())
234+
/// }
235+
/// #[pymodule]
236+
/// fn top_level(_py: Python, module: &PyModule) -> PyResult<()> {
237+
/// module.add_submodule(pyo3::wrap_pymodule!(utils))
238+
/// }
216239
/// ```
217240
pub fn add_submodule<'a>(&'a self, wrapper: &impl Fn(Python<'a>) -> PyObject) -> PyResult<()> {
218-
let module = wrapper(self.py());
219-
let name = module.getattr(self.py(), "__name__")?;
220-
self.add(name.extract(self.py())?, module)
241+
let py = self.py();
242+
let module = wrapper(py);
243+
let name = module.getattr(py, "__name__")?;
244+
let name = name.extract(py)?;
245+
self.add(name, module)
221246
}
222247

223248
/// Add a function to a module.
224249
///
225250
/// Use this together with the`#[pyfunction]` and [wrap_pyfunction!].
226251
///
227-
/// ```rust,ignore
228-
/// m.add_function(wrap_pyfunction!(double));
252+
/// ```rust
253+
/// use pyo3::prelude::*;
254+
/// #[pyfunction]
255+
/// fn double(x: usize) -> usize {
256+
/// x * 2
257+
/// }
258+
/// #[pymodule]
259+
/// fn double_mod(_py: Python, module: &PyModule) -> PyResult<()> {
260+
/// module.add_function(pyo3::wrap_pyfunction!(double))
261+
/// }
229262
/// ```
230263
///
231264
/// You can also add a function with a custom name using [add](PyModule::add):
232265
///
233-
/// ```rust,ignore
234-
/// m.add("also_double", wrap_pyfunction!(double)(py, m));
266+
/// ```rust
267+
/// use pyo3::prelude::*;
268+
/// #[pyfunction]
269+
/// fn double(x: usize) -> usize {
270+
/// x * 2
271+
/// }
272+
/// #[pymodule]
273+
/// fn double_mod(_py: Python, module: &PyModule) -> PyResult<()> {
274+
/// module.add("also_double", pyo3::wrap_pyfunction!(double)(module)?)
275+
/// }
235276
/// ```
236277
pub fn add_function<'a>(
237278
&'a self,
238279
wrapper: &impl Fn(&'a Self) -> PyResult<PyObject>,
239280
) -> PyResult<()> {
281+
let py = self.py();
240282
let function = wrapper(self)?;
241-
let name = function.getattr(self.py(), "__name__")?;
242-
self.add(name.extract(self.py())?, function)
283+
let name = function.getattr(py, "__name__")?;
284+
let name = name.extract(py)?;
285+
self.add(name, function)
243286
}
244287
}

0 commit comments

Comments
 (0)