pyo3/impl_/
exceptions.rs

1use crate::{sync::GILOnceCell, types::PyType, Bound, Py, Python};
2
3pub struct ImportedExceptionTypeObject {
4    imported_value: GILOnceCell<Py<PyType>>,
5    module: &'static str,
6    name: &'static str,
7}
8
9impl ImportedExceptionTypeObject {
10    pub const fn new(module: &'static str, name: &'static str) -> Self {
11        Self {
12            imported_value: GILOnceCell::new(),
13            module,
14            name,
15        }
16    }
17
18    pub fn get<'py>(&self, py: Python<'py>) -> &Bound<'py, PyType> {
19        self.imported_value
20            .import(py, self.module, self.name)
21            .unwrap_or_else(|e| {
22                panic!(
23                    "failed to import exception {}.{}: {}",
24                    self.module, self.name, e
25                )
26            })
27    }
28}
⚠️ Internal Docs ⚠️ Not Public API 👉 Official Docs Here