From e14aab520c69d529e0ba231a5059bab98b00a42b Mon Sep 17 00:00:00 2001 From: David Hewitt Date: Thu, 15 Aug 2024 15:59:37 +0100 Subject: [PATCH] remove some `methods` impl details from public API (#4441) --- newsfragments/4441.changed.md | 1 + pyo3-macros-backend/src/pyclass.rs | 4 ++-- pyo3-macros-backend/src/pyimpl.rs | 4 ++-- pyo3-macros-backend/src/pymethod.rs | 14 +++++++------- src/impl_/pyclass.rs | 16 +++++++++------- src/impl_/pyclass/lazy_type_object.rs | 3 ++- src/impl_/pymodule.rs | 3 ++- src/impl_/trampoline.rs | 2 +- src/lib.rs | 25 +++++++++++++++---------- src/pyclass/create_type_object.rs | 4 ++-- 10 files changed, 43 insertions(+), 33 deletions(-) create mode 100644 newsfragments/4441.changed.md diff --git a/newsfragments/4441.changed.md b/newsfragments/4441.changed.md new file mode 100644 index 00000000000..996b368807e --- /dev/null +++ b/newsfragments/4441.changed.md @@ -0,0 +1 @@ +Deprecate `IPowModulo`, `PyClassAttributeDef`, `PyGetterDef`, `PyMethodDef`, `PyMethodDefType`, and `PySetterDef` from PyO3's public API. diff --git a/pyo3-macros-backend/src/pyclass.rs b/pyo3-macros-backend/src/pyclass.rs index 164b5f7e921..5ad5e61da26 100644 --- a/pyo3-macros-backend/src/pyclass.rs +++ b/pyo3-macros-backend/src/pyclass.rs @@ -1541,8 +1541,8 @@ pub fn gen_complex_enum_variant_attr( let method_def = quote! { #pyo3_path::impl_::pyclass::MaybeRuntimePyMethodDef::Static( - #pyo3_path::class::PyMethodDefType::ClassAttribute({ - #pyo3_path::class::PyClassAttributeDef::new( + #pyo3_path::impl_::pymethods::PyMethodDefType::ClassAttribute({ + #pyo3_path::impl_::pymethods::PyClassAttributeDef::new( #python_name, #cls_type::#wrapper_ident ) diff --git a/pyo3-macros-backend/src/pyimpl.rs b/pyo3-macros-backend/src/pyimpl.rs index 2f054be165f..69b7bb04f48 100644 --- a/pyo3-macros-backend/src/pyimpl.rs +++ b/pyo3-macros-backend/src/pyimpl.rs @@ -219,8 +219,8 @@ pub fn gen_py_const(cls: &syn::Type, spec: &ConstSpec, ctx: &Ctx) -> MethodAndMe let method_def = quote! { #pyo3_path::impl_::pyclass::MaybeRuntimePyMethodDef::Static( - #pyo3_path::class::PyMethodDefType::ClassAttribute({ - #pyo3_path::class::PyClassAttributeDef::new( + #pyo3_path::impl_::pymethods::PyMethodDefType::ClassAttribute({ + #pyo3_path::impl_::pymethods::PyClassAttributeDef::new( #python_name, #cls::#wrapper_ident ) diff --git a/pyo3-macros-backend/src/pymethod.rs b/pyo3-macros-backend/src/pymethod.rs index 78d7dac2330..3fb13e17373 100644 --- a/pyo3-macros-backend/src/pymethod.rs +++ b/pyo3-macros-backend/src/pymethod.rs @@ -330,7 +330,7 @@ pub fn impl_py_method_def( let methoddef = spec.get_methoddef(quote! { #cls::#wrapper_ident }, doc, ctx); let method_def = quote! { #pyo3_path::impl_::pyclass::MaybeRuntimePyMethodDef::Static( - #pyo3_path::class::PyMethodDefType::#methoddef_type(#methoddef #add_flags) + #pyo3_path::impl_::pymethods::PyMethodDefType::#methoddef_type(#methoddef #add_flags) ) }; Ok(MethodAndMethodDef { @@ -510,8 +510,8 @@ fn impl_py_class_attribute( let method_def = quote! { #pyo3_path::impl_::pyclass::MaybeRuntimePyMethodDef::Static( - #pyo3_path::class::PyMethodDefType::ClassAttribute({ - #pyo3_path::class::PyClassAttributeDef::new( + #pyo3_path::impl_::pymethods::PyMethodDefType::ClassAttribute({ + #pyo3_path::impl_::pymethods::PyClassAttributeDef::new( #python_name, #cls::#wrapper_ident ) @@ -691,8 +691,8 @@ pub fn impl_py_setter_def( let method_def = quote! { #cfg_attrs #pyo3_path::impl_::pyclass::MaybeRuntimePyMethodDef::Static( - #pyo3_path::class::PyMethodDefType::Setter( - #pyo3_path::class::PySetterDef::new( + #pyo3_path::impl_::pymethods::PyMethodDefType::Setter( + #pyo3_path::impl_::pymethods::PySetterDef::new( #python_name, #cls::#wrapper_ident, #doc @@ -826,8 +826,8 @@ pub fn impl_py_getter_def( let method_def = quote! { #cfg_attrs #pyo3_path::impl_::pyclass::MaybeRuntimePyMethodDef::Static( - #pyo3_path::class::PyMethodDefType::Getter( - #pyo3_path::class::PyGetterDef::new( + #pyo3_path::impl_::pymethods::PyMethodDefType::Getter( + #pyo3_path::impl_::pymethods::PyGetterDef::new( #python_name, #cls::#wrapper_ident, #doc diff --git a/src/impl_/pyclass.rs b/src/impl_/pyclass.rs index fdc7c2edd25..1680eca34ac 100644 --- a/src/impl_/pyclass.rs +++ b/src/impl_/pyclass.rs @@ -1,12 +1,14 @@ use crate::{ exceptions::{PyAttributeError, PyNotImplementedError, PyRuntimeError, PyValueError}, ffi, - impl_::freelist::FreeList, - impl_::pycell::{GetBorrowChecker, PyClassMutability, PyClassObjectLayout}, + impl_::{ + freelist::FreeList, + pycell::{GetBorrowChecker, PyClassMutability, PyClassObjectLayout}, + pymethods::{PyGetterDef, PyMethodDefType}, + }, pyclass_init::PyObjectInit, types::{any::PyAnyMethods, PyBool}, - Borrowed, IntoPy, Py, PyAny, PyClass, PyErr, PyMethodDefType, PyResult, PyTypeInfo, Python, - ToPyObject, + Borrowed, IntoPy, Py, PyAny, PyClass, PyErr, PyResult, PyTypeInfo, Python, ToPyObject, }; use std::{ borrow::Cow, @@ -1249,7 +1251,7 @@ impl< doc: doc.as_ptr(), }) } else { - PyMethodDefType::Getter(crate::PyGetterDef { + PyMethodDefType::Getter(PyGetterDef { name, meth: pyo3_get_value_topyobject::, Offset>, doc, @@ -1263,7 +1265,7 @@ impl { pub const fn generate(&self, name: &'static CStr, doc: &'static CStr) -> PyMethodDefType { - PyMethodDefType::Getter(crate::PyGetterDef { + PyMethodDefType::Getter(PyGetterDef { name, meth: pyo3_get_value_topyobject::, doc, @@ -1292,7 +1294,7 @@ impl> where FieldT: PyO3GetField, { - PyMethodDefType::Getter(crate::PyGetterDef { + PyMethodDefType::Getter(PyGetterDef { name, meth: pyo3_get_value::, doc, diff --git a/src/impl_/pyclass/lazy_type_object.rs b/src/impl_/pyclass/lazy_type_object.rs index 08a5f17d4bd..be383a272f3 100644 --- a/src/impl_/pyclass/lazy_type_object.rs +++ b/src/impl_/pyclass/lazy_type_object.rs @@ -9,10 +9,11 @@ use crate::{ exceptions::PyRuntimeError, ffi, impl_::pyclass::MaybeRuntimePyMethodDef, + impl_::pymethods::PyMethodDefType, pyclass::{create_type_object, PyClassTypeObject}, sync::{GILOnceCell, GILProtected}, types::PyType, - Bound, PyClass, PyErr, PyMethodDefType, PyObject, PyResult, Python, + Bound, PyClass, PyErr, PyObject, PyResult, Python, }; use super::PyClassItemsIter; diff --git a/src/impl_/pymodule.rs b/src/impl_/pymodule.rs index 08d55bfa5e8..d199bf95aac 100644 --- a/src/impl_/pymodule.rs +++ b/src/impl_/pymodule.rs @@ -21,9 +21,10 @@ use std::sync::atomic::{AtomicI64, Ordering}; use crate::exceptions::PyImportError; use crate::{ ffi, + impl_::pymethods::PyMethodDef, sync::GILOnceCell, types::{PyCFunction, PyModule, PyModuleMethods}, - Bound, Py, PyClass, PyMethodDef, PyResult, PyTypeInfo, Python, + Bound, Py, PyClass, PyResult, PyTypeInfo, Python, }; /// `Sync` wrapper of `ffi::PyModuleDef`. diff --git a/src/impl_/trampoline.rs b/src/impl_/trampoline.rs index f485258e5e5..86dc0067c8b 100644 --- a/src/impl_/trampoline.rs +++ b/src/impl_/trampoline.rs @@ -12,7 +12,7 @@ use std::{ use crate::gil::GILGuard; use crate::{ callback::PyCallbackOutput, ffi, ffi_ptr_ext::FfiPtrExt, impl_::panic::PanicTrap, - methods::IPowModulo, panic::PanicException, types::PyModule, Py, PyResult, Python, + impl_::pymethods::IPowModulo, panic::PanicException, types::PyModule, Py, PyResult, Python, }; #[inline] diff --git a/src/lib.rs b/src/lib.rs index 267639a271d..8af911e0fbe 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -343,19 +343,24 @@ pub(crate) mod sealed; pub mod class { pub use self::gc::{PyTraverseError, PyVisit}; - #[doc(hidden)] - pub use self::methods::{ - PyClassAttributeDef, PyGetterDef, PyMethodDef, PyMethodDefType, PyMethodType, PySetterDef, - }; + pub use self::methods::*; #[doc(hidden)] pub mod methods { - // frozen with the contents of the `impl_::pymethods` module in 0.20, - // this should probably all be replaced with deprecated type aliases and removed. - pub use crate::impl_::pymethods::{ - IPowModulo, PyClassAttributeDef, PyGetterDef, PyMethodDef, PyMethodDefType, - PyMethodType, PySetterDef, - }; + #[deprecated(since = "0.23.0", note = "PyO3 implementation detail")] + pub type IPowModulo = crate::impl_::pymethods::IPowModulo; + #[deprecated(since = "0.23.0", note = "PyO3 implementation detail")] + pub type PyClassAttributeDef = crate::impl_::pymethods::PyClassAttributeDef; + #[deprecated(since = "0.23.0", note = "PyO3 implementation detail")] + pub type PyGetterDef = crate::impl_::pymethods::PyGetterDef; + #[deprecated(since = "0.23.0", note = "PyO3 implementation detail")] + pub type PyMethodDef = crate::impl_::pymethods::PyMethodDef; + #[deprecated(since = "0.23.0", note = "PyO3 implementation detail")] + pub type PyMethodDefType = crate::impl_::pymethods::PyMethodDefType; + #[deprecated(since = "0.23.0", note = "PyO3 implementation detail")] + pub type PyMethodType = crate::impl_::pymethods::PyMethodType; + #[deprecated(since = "0.23.0", note = "PyO3 implementation detail")] + pub type PySetterDef = crate::impl_::pymethods::PySetterDef; } /// Old module which contained some implementation details of the `#[pyproto]` module. diff --git a/src/pyclass/create_type_object.rs b/src/pyclass/create_type_object.rs index 00dc7ee36f8..ac5b6287e86 100644 --- a/src/pyclass/create_type_object.rs +++ b/src/pyclass/create_type_object.rs @@ -7,12 +7,12 @@ use crate::{ assign_sequence_item_from_mapping, get_sequence_item_from_mapping, tp_dealloc, tp_dealloc_with_gc, MaybeRuntimePyMethodDef, PyClassItemsIter, }, - pymethods::{Getter, Setter}, + pymethods::{Getter, PyGetterDef, PyMethodDefType, PySetterDef, Setter}, trampoline::trampoline, }, internal_tricks::ptr_from_ref, types::{typeobject::PyTypeMethods, PyType}, - Py, PyClass, PyGetterDef, PyMethodDefType, PyResult, PySetterDef, PyTypeInfo, Python, + Py, PyClass, PyResult, PyTypeInfo, Python, }; use std::{ collections::HashMap,