rustpython_vm/stdlib/
warnings.rs1pub(crate) use _warnings::make_module;
2
3use crate::{builtins::PyType, Py, PyResult, VirtualMachine};
4
5pub fn warn(
6 category: &Py<PyType>,
7 message: String,
8 stack_level: usize,
9 vm: &VirtualMachine,
10) -> PyResult<()> {
11 if let Ok(module) = vm.import("warnings", 0) {
13 if let Ok(func) = module.get_attr("warn", vm) {
14 let _ = func.call((message, category.to_owned(), stack_level), vm);
15 }
16 }
17 Ok(())
18}
19
20#[pymodule]
21mod _warnings {
22 use crate::{
23 builtins::{PyStrRef, PyTypeRef},
24 function::OptionalArg,
25 PyResult, VirtualMachine,
26 };
27
28 #[derive(FromArgs)]
29 struct WarnArgs {
30 #[pyarg(positional)]
31 message: PyStrRef,
32 #[pyarg(any, optional)]
33 category: OptionalArg<PyTypeRef>,
34 #[pyarg(any, optional)]
35 stacklevel: OptionalArg<u32>,
36 }
37
38 #[pyfunction]
39 fn warn(args: WarnArgs, vm: &VirtualMachine) -> PyResult<()> {
40 let level = args.stacklevel.unwrap_or(1);
41 crate::warn::warn(
42 args.message,
43 args.category.into_option(),
44 level as isize,
45 None,
46 vm,
47 )
48 }
49}