Increase use of common get_or_try_init_type_ref helper when caching type objects.

This commit is contained in:
Adam Reichold 2023-12-21 09:55:54 +01:00
parent 7f626b26d4
commit c1f4db0a9b
3 changed files with 8 additions and 16 deletions

View file

@ -1,5 +1,5 @@
//! Synchronization mechanisms based on the Python GIL.
use crate::{types::PyString, types::PyType, Py, PyErr, PyVisit, Python};
use crate::{types::PyString, types::PyType, Py, PyResult, PyVisit, Python};
use std::cell::UnsafeCell;
/// Value with concurrent access protected by the GIL.
@ -196,7 +196,7 @@ impl GILOnceCell<Py<PyType>> {
py: Python<'py>,
module_name: &str,
attr_name: &str,
) -> Result<&'py PyType, PyErr> {
) -> PyResult<&'py PyType> {
self.get_or_try_init(py, || py.import(module_name)?.getattr(attr_name)?.extract())
.map(|ty| ty.as_ref(py))
}

View file

@ -240,14 +240,10 @@ impl<'py> PyMappingMethods<'py> for Py2<'py, PyMapping> {
}
}
static MAPPING_ABC: GILOnceCell<Py<PyType>> = GILOnceCell::new();
fn get_mapping_abc(py: Python<'_>) -> PyResult<&PyType> {
MAPPING_ABC
.get_or_try_init(py, || {
py.import("collections.abc")?.getattr("Mapping")?.extract()
})
.map(|ty| ty.as_ref(py))
static MAPPING_ABC: GILOnceCell<Py<PyType>> = GILOnceCell::new();
MAPPING_ABC.get_or_try_init_type_ref(py, "collections.abc", "Mapping")
}
impl PyTypeCheck for PyMapping {

View file

@ -523,14 +523,10 @@ where
Ok(v)
}
static SEQUENCE_ABC: GILOnceCell<Py<PyType>> = GILOnceCell::new();
fn get_sequence_abc(py: Python<'_>) -> PyResult<&PyType> {
SEQUENCE_ABC
.get_or_try_init(py, || {
py.import("collections.abc")?.getattr("Sequence")?.extract()
})
.map(|ty| ty.as_ref(py))
static SEQUENCE_ABC: GILOnceCell<Py<PyType>> = GILOnceCell::new();
SEQUENCE_ABC.get_or_try_init_type_ref(py, "collections.abc", "Sequence")
}
impl PyTypeCheck for PySequence {