@@ -185,15 +185,28 @@ impl PyModule {
185
185
/// Use this together with the`#[pyfunction]` and [wrap_pyfunction!] or `#[pymodule]` and
186
186
/// [wrap_pymodule!].
187
187
///
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
+ /// }
191
204
/// ```
192
205
///
193
206
/// You can also add a function with a custom name using [add](PyModule::add):
194
207
///
195
208
/// ```rust,ignore
196
- /// m.add("also_double", wrap_pyfunction!(double)(py)) ;
209
+ /// m.add("also_double", wrap_pyfunction!(double)(m)?)? ;
197
210
/// ```
198
211
///
199
212
/// **This function will be deprecated in the next release. Please use the specific
@@ -202,43 +215,73 @@ impl PyModule {
202
215
where
203
216
T : IntoPyCallbackOutput < PyObject > ,
204
217
{
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)
208
223
}
209
224
210
225
/// Add a submodule to a module.
211
226
///
212
227
/// Use this together with `#[pymodule]` and [wrap_pymodule!].
213
228
///
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
+ /// }
216
239
/// ```
217
240
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)
221
246
}
222
247
223
248
/// Add a function to a module.
224
249
///
225
250
/// Use this together with the`#[pyfunction]` and [wrap_pyfunction!].
226
251
///
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
+ /// }
229
262
/// ```
230
263
///
231
264
/// You can also add a function with a custom name using [add](PyModule::add):
232
265
///
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
+ /// }
235
276
/// ```
236
277
pub fn add_function < ' a > (
237
278
& ' a self ,
238
279
wrapper : & impl Fn ( & ' a Self ) -> PyResult < PyObject > ,
239
280
) -> PyResult < ( ) > {
281
+ let py = self . py ( ) ;
240
282
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)
243
286
}
244
287
}
0 commit comments