BREAKING CHANGE in v26: Remove RegisterExtension in message class

PiperOrigin-RevId: 595989309
pull/15270/head
Jie Luo 1 year ago committed by Copybara-Service
parent 7bbc0b6536
commit 4ebba684c7
  1. 9
      python/google/protobuf/internal/python_message.py
  2. 5
      python/google/protobuf/message.py
  3. 28
      python/google/protobuf/pyext/message.cc
  4. 4
      python/google/protobuf/pyext/message.h

@ -779,15 +779,6 @@ def _AddPropertiesForExtensions(descriptor, cls):
pool = descriptor.file.pool
def _AddStaticMethods(cls):
# TODO: This probably needs to be thread-safe(?)
def RegisterExtension(field_descriptor):
field_descriptor.containing_type = cls.DESCRIPTOR
# TODO: Use cls.MESSAGE_FACTORY.pool when available.
# pylint: disable=protected-access
cls.DESCRIPTOR.file.pool._AddExtensionDescriptor(field_descriptor)
_AttachFieldHelpers(cls, field_descriptor)
cls.RegisterExtension = staticmethod(RegisterExtension)
def FromString(s):
message = cls()
message.MergeFromString(s)

@ -340,11 +340,6 @@ class Message(object):
def FromString(cls, s):
raise NotImplementedError
# TODO: Remove it in OSS
@staticmethod
def RegisterExtension(field_descriptor):
raise NotImplementedError
def _SetListener(self, message_listener):
"""Internal method used by the protocol message implementation.
Clients should not call this directly.

@ -1855,32 +1855,6 @@ static PyObject* ByteSize(CMessage* self, PyObject* args) {
return PyLong_FromLong(self->message->ByteSizeLong());
}
PyObject* RegisterExtension(PyObject* cls, PyObject* extension_handle) {
const FieldDescriptor* descriptor =
GetExtensionDescriptor(extension_handle);
if (descriptor == nullptr) {
return nullptr;
}
if (!PyObject_TypeCheck(cls, CMessageClass_Type)) {
PyErr_Format(PyExc_TypeError, "Expected a message class, got %s",
cls->ob_type->tp_name);
return nullptr;
}
CMessageClass *message_class = reinterpret_cast<CMessageClass*>(cls);
if (message_class == nullptr) {
return nullptr;
}
// If the extension was already registered, check that it is the same.
const FieldDescriptor* existing_extension =
message_class->py_message_factory->pool->pool->FindExtensionByNumber(
descriptor->containing_type(), descriptor->number());
if (existing_extension != nullptr && existing_extension != descriptor) {
PyErr_SetString(PyExc_ValueError, "Double registration of Extensions");
return nullptr;
}
Py_RETURN_NONE;
}
static PyObject* SetInParent(CMessage* self, PyObject* args) {
AssureWritable(self);
Py_RETURN_NONE;
@ -2391,8 +2365,6 @@ static PyMethodDef Methods[] = {
"Merges a serialized message into the current message."},
{"ParseFromString", (PyCFunction)ParseFromString, METH_O,
"Parses a serialized message into the current message."},
{"RegisterExtension", (PyCFunction)RegisterExtension, METH_O | METH_CLASS,
"Registers an extension with the current message."},
{"SerializePartialToString", (PyCFunction)SerializePartialToString,
METH_VARARGS | METH_KEYWORDS,
"Serializes the message to a string, even if it isn't initialized."},

@ -229,10 +229,6 @@ int InitAttributes(CMessage* self, PyObject* args, PyObject* kwargs);
PyObject* MergeFrom(CMessage* self, PyObject* arg);
// This method does not do anything beyond checking that no other extension
// has been registered with the same field number on this class.
PyObject* RegisterExtension(PyObject* cls, PyObject* extension_handle);
// Get a field from a message.
PyObject* GetFieldValue(CMessage* self,
const FieldDescriptor* field_descriptor);

Loading…
Cancel
Save