Skip to content

Commit

Permalink
Prepare the code for migrating protobuf string accessors to
Browse files Browse the repository at this point in the history
`absl::string_view`.

PiperOrigin-RevId: 651113544
  • Loading branch information
protobuf-github-bot authored and copybara-github committed Jul 10, 2024
1 parent ab78e2f commit 32bcf0b
Show file tree
Hide file tree
Showing 8 changed files with 119 additions and 101 deletions.
20 changes: 10 additions & 10 deletions python/google/protobuf/pyext/descriptor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ namespace python {
// All descriptors are stored here.
std::unordered_map<const void*, PyObject*>* interned_descriptors;

PyObject* PyString_FromCppString(const std::string& str) {
return PyUnicode_FromStringAndSize(str.c_str(), str.size());
PyObject* PyString_FromCppString(absl::string_view str) {
return PyUnicode_FromStringAndSize(str.data(), str.size());
}

// Check that the calling Python code is the global scope of a _pb2.py module.
Expand Down Expand Up @@ -266,7 +266,7 @@ static PyObject* GetOrBuildMessageInDefaultPool(
message_factory::GetOrCreateMessageClass(message_factory, message_type);
if (message_class == nullptr) {
PyErr_Format(PyExc_TypeError, "Could not retrieve class for: %s",
message_type->full_name().c_str());
std::string(message_type->full_name()).c_str());
return nullptr;
}
ScopedPyObjectPtr args(PyTuple_New(0));
Expand All @@ -278,7 +278,7 @@ static PyObject* GetOrBuildMessageInDefaultPool(
}
if (!PyObject_TypeCheck(value.get(), CMessage_Type)) {
PyErr_Format(PyExc_TypeError, "Invalid class for %s: %s",
message_type->full_name().c_str(),
std::string(message_type->full_name()).c_str(),
Py_TYPE(value.get())->tp_name);
return nullptr;
}
Expand Down Expand Up @@ -339,7 +339,7 @@ static PyObject* CopyToPythonProto(const DescriptorClass *descriptor,
if (!PyObject_TypeCheck(target, CMessage_Type) ||
message->message->GetDescriptor() != self_descriptor) {
PyErr_Format(PyExc_TypeError, "Not a %s message",
self_descriptor->full_name().c_str());
std::string(self_descriptor->full_name()).c_str());
return nullptr;
}
cmessage::AssureWritable(message);
Expand Down Expand Up @@ -902,8 +902,8 @@ static PyObject* GetDefaultValue(PyBaseDescriptor *self, void *closure) {
break;
}
case FieldDescriptor::CPPTYPE_STRING: {
const std::string& value = _GetDescriptor(self)->default_value_string();
result = ToStringObject(_GetDescriptor(self), value);
result = ToStringObject(_GetDescriptor(self),
_GetDescriptor(self)->default_value_string());
break;
}
case FieldDescriptor::CPPTYPE_ENUM: {
Expand All @@ -918,7 +918,7 @@ static PyObject* GetDefaultValue(PyBaseDescriptor *self, void *closure) {
}
default:
PyErr_Format(PyExc_NotImplementedError, "default value for %s",
_GetDescriptor(self)->full_name().c_str());
std::string(_GetDescriptor(self)->full_name()).c_str());
return nullptr;
}
return result;
Expand Down Expand Up @@ -2052,8 +2052,8 @@ static bool AddEnumValues(PyTypeObject *type,
if (obj == nullptr) {
return false;
}
if (PyDict_SetItemString(type->tp_dict, value->name().c_str(), obj.get()) <
0) {
if (PyDict_SetItemString(type->tp_dict, std::string(value->name()).c_str(),
obj.get()) < 0) {
return false;
}
}
Expand Down
41 changes: 20 additions & 21 deletions python/google/protobuf/pyext/descriptor_containers.cc
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,8 @@ typedef const void* (*GetByCamelcaseNameMethod)(PyContainer* self,
absl::string_view name);
typedef const void* (*GetByNumberMethod)(PyContainer* self, int index);
typedef PyObject* (*NewObjectFromItemMethod)(const void* descriptor);
typedef const std::string& (*GetItemNameMethod)(const void* descriptor);
typedef const std::string& (*GetItemCamelcaseNameMethod)(
const void* descriptor);
typedef absl::string_view (*GetItemNameMethod)(const void* descriptor);
typedef absl::string_view (*GetItemCamelcaseNameMethod)(const void* descriptor);
typedef int (*GetItemNumberMethod)(const void* descriptor);
typedef int (*GetItemIndexMethod)(const void* descriptor);

Expand Down Expand Up @@ -205,13 +204,13 @@ static PyObject* _NewKey_ByIndex(PyContainer* self, Py_ssize_t index) {
const void* item = self->container_def->get_by_index_fn(self, index);
switch (self->kind) {
case PyContainer::KIND_BYNAME: {
const std::string& name(self->container_def->get_item_name_fn(item));
return PyUnicode_FromStringAndSize(name.c_str(), name.size());
absl::string_view name = self->container_def->get_item_name_fn(item);
return PyUnicode_FromStringAndSize(name.data(), name.size());
}
case PyContainer::KIND_BYCAMELCASENAME: {
const std::string& name(
self->container_def->get_item_camelcase_name_fn(item));
return PyUnicode_FromStringAndSize(name.c_str(), name.size());
absl::string_view name =
self->container_def->get_item_camelcase_name_fn(item);
return PyUnicode_FromStringAndSize(name.data(), name.size());
}
case PyContainer::KIND_BYNUMBER: {
int value = self->container_def->get_item_number_fn(item);
Expand Down Expand Up @@ -963,11 +962,11 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyFieldDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

static const std::string& GetItemCamelcaseName(const void* item) {
static absl::string_view GetItemCamelcaseName(const void* item) {
return static_cast<ItemDescriptor>(item)->camelcase_name();
}

Expand Down Expand Up @@ -1024,7 +1023,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyMessageDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1076,7 +1075,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyEnumDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1155,7 +1154,7 @@ static PyObject* NewObjectFromItem(const void* item) {
static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1190,7 +1189,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyFieldDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1242,7 +1241,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyOneofDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1301,7 +1300,7 @@ static PyObject* NewObjectFromItem(const void* item) {
static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1404,7 +1403,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyMethodDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1458,7 +1457,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyMessageDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1498,7 +1497,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyEnumDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1538,7 +1537,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyFieldDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down Expand Up @@ -1578,7 +1577,7 @@ static PyObject* NewObjectFromItem(const void* item) {
return PyServiceDescriptor_FromDescriptor(static_cast<ItemDescriptor>(item));
}

static const std::string& GetItemName(const void* item) {
static absl::string_view GetItemName(const void* item) {
return static_cast<ItemDescriptor>(item)->name();
}

Expand Down
9 changes: 5 additions & 4 deletions python/google/protobuf/pyext/descriptor_pool.cc
Original file line number Diff line number Diff line change
Expand Up @@ -569,10 +569,11 @@ static PyObject* SetFeatureSetDefaults(PyObject* pself, PyObject* pdefaults) {
CMessage* defaults = reinterpret_cast<CMessage*>(pdefaults);
if (defaults->message->GetDescriptor() !=
FeatureSetDefaults::GetDescriptor()) {
PyErr_Format(PyExc_TypeError,
"SetFeatureSetDefaults called with invalid type: "
" got %s.",
defaults->message->GetDescriptor()->full_name().c_str());
PyErr_Format(
PyExc_TypeError,
"SetFeatureSetDefaults called with invalid type: "
" got %s.",
std::string(defaults->message->GetDescriptor()->full_name()).c_str());
return nullptr;
}

Expand Down
2 changes: 1 addition & 1 deletion python/google/protobuf/pyext/extension_dict.cc
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ static int Contains(PyObject* _self, PyObject* key) {

if (!field_descriptor->is_extension()) {
PyErr_Format(PyExc_KeyError, "%s is not an extension",
field_descriptor->full_name().c_str());
std::string(field_descriptor->full_name()).c_str());
return -1;
}

Expand Down
9 changes: 5 additions & 4 deletions python/google/protobuf/pyext/field.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ namespace python {
namespace field {

static PyObject* Repr(PyMessageFieldProperty* self) {
return PyUnicode_FromFormat("<field property '%s'>",
self->field_descriptor->full_name().c_str());
return PyUnicode_FromFormat(
"<field property '%s'>",
std::string(self->field_descriptor->full_name()).c_str());
}

static PyObject* DescrGet(PyMessageFieldProperty* self, PyObject* obj,
Expand Down Expand Up @@ -47,8 +48,8 @@ static PyObject* GetDescriptor(PyMessageFieldProperty* self, void* closure) {
}

static PyObject* GetDoc(PyMessageFieldProperty* self, void* closure) {
return PyUnicode_FromFormat("Field %s",
self->field_descriptor->full_name().c_str());
return PyUnicode_FromFormat(
"Field %s", std::string(self->field_descriptor->full_name()).c_str());
}

static PyGetSetDef Getters[] = {
Expand Down
Loading

0 comments on commit 32bcf0b

Please sign in to comment.