Go to the documentation of this file.
33 #include <google/protobuf/pyext/descriptor.h>
35 #define PY_SSIZE_T_CLEAN
37 #include <frameobject.h>
41 #include <unordered_map>
43 #include <google/protobuf/io/coded_stream.h>
44 #include <google/protobuf/descriptor.pb.h>
45 #include <google/protobuf/dynamic_message.h>
46 #include <google/protobuf/pyext/descriptor_containers.h>
47 #include <google/protobuf/pyext/descriptor_pool.h>
48 #include <google/protobuf/pyext/message.h>
49 #include <google/protobuf/pyext/message_factory.h>
50 #include <google/protobuf/pyext/scoped_pyobject_ptr.h>
51 #include <google/protobuf/stubs/hash.h>
53 #define PyString_AsStringAndSize(ob, charpp, sizep) \
54 (PyUnicode_Check(ob) ? ((*(charpp) = const_cast<char*>( \
55 PyUnicode_AsUTF8AndSize(ob, (sizep)))) == NULL \
58 : PyBytes_AsStringAndSize(ob, (charpp), (sizep)))
73 return PyUnicode_FromStringAndSize(
str.c_str(),
str.size());
97 PyFrameObject*
frame = PyEval_GetFrame();
101 while (stacklevel-- > 0) {
108 if (
frame->f_code->co_filename == NULL) {
112 Py_ssize_t filename_size;
119 if ((filename_size < 3) ||
120 (strcmp(&
filename[filename_size - 3],
".py") != 0)) {
125 if (filename_size < 7) {
129 if (strcmp(&
filename[filename_size - 7],
"_pb2.py") != 0) {
148 PyErr_Format(PyExc_AttributeError,
149 "attribute is not writable: %s", attr_name);
154 #ifndef PyVarObject_HEAD_INIT
155 #define PyVarObject_HEAD_INIT(type, size) PyObject_HEAD_INIT(type) size,
158 #define Py_TYPE(ob) (((PyObject*)(ob))->ob_type)
165 template<
class DescriptorClass>
190 from.SerializeToString(&serialized);
192 reinterpret_cast<const uint8_t*
>(serialized.c_str()), serialized.size());
193 input.SetExtensionRegistry(message_factory->pool->pool,
194 message_factory->message_factory);
195 bool success =
to->ParseFromCodedStream(&
input);
208 template<
class DescriptorClass>
214 std::unordered_map<const void*, PyObject*>* descriptor_options =
216 if (descriptor_options->find(
descriptor) != descriptor_options->end()) {
239 if (message_class == NULL) {
240 PyErr_Format(PyExc_TypeError,
"Could not retrieve class for Options: %s",
247 Py_DECREF(message_class);
252 PyErr_Format(PyExc_TypeError,
"Invalid class for %s: %s",
261 if (unknown_fields.
empty()) {
266 PyErr_Format(PyExc_ValueError,
"Error reparsing Options message");
272 Py_INCREF(
value.get());
275 return value.release();
281 template<
class DescriptorProtoClass,
class DescriptorClass>
285 DescriptorProtoClass::default_instance().GetDescriptor();
288 message->message->GetDescriptor() != self_descriptor) {
289 PyErr_Format(PyExc_TypeError,
"Not a %s message",
294 DescriptorProtoClass* descriptor_message =
295 static_cast<DescriptorProtoClass*
>(
message->message);
302 if (!
Reparse(message_factory, *descriptor_message, descriptor_message)) {
303 PyErr_Format(PyExc_ValueError,
"Error reparsing descriptor message");
341 template<
class DescriptorClass>
346 *was_created =
false;
349 PyErr_BadInternalCall();
358 Py_INCREF(
it->second);
364 if (py_descriptor == NULL) {
371 std::make_pair(
descriptor,
reinterpret_cast<PyObject*
>(py_descriptor)));
378 PyObject_Del(py_descriptor);
382 py_descriptor->pool =
pool;
384 PyObject_GC_Track(py_descriptor);
389 return reinterpret_cast<PyObject*
>(py_descriptor);
396 Py_CLEAR(
self->pool);
402 Py_VISIT(
self->pool);
408 Py_CLEAR(
self->pool);
436 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
437 "Descriptors
base class",
453 PyErr_SetString(PyExc_TypeError,
"Not a BaseDescriptor");
459 namespace message_descriptor {
463 return reinterpret_cast<const Descriptor*
>(
self->descriptor);
488 Py_XINCREF(concrete_class);
555 PyObject* range_list = PyList_New(
descriptor->extension_range_count());
557 for (
int i = 0;
i <
descriptor->extension_range_count();
i++) {
559 PyObject*
start = PyLong_FromLong(
range->start);
560 PyObject*
end = PyLong_FromLong(
range->end);
561 PyList_SetItem(range_list,
i, PyTuple_Pack(2,
start,
end));
614 const char *enum_name;
616 if (!PyArg_ParseTuple(
args,
"si", &enum_name, &
number))
621 PyErr_SetString(PyExc_KeyError, enum_name);
626 if (enum_value == NULL) {
627 PyErr_Format(PyExc_KeyError,
"%d",
number);
634 return PyUnicode_InternFromString(
639 {
"name", (getter)
GetName, NULL,
"Last name"},
640 {
"full_name", (getter)
GetFullName, NULL,
"Full name"},
642 {
"file", (getter)
GetFile, NULL,
"File descriptor"},
644 {
"fields", (getter)
GetFieldsSeq, NULL,
"Fields sequence"},
647 "Fields by camelCase name"},
651 "Nested types by name"},
652 {
"extensions", (getter)
GetExtensions, NULL,
"Extensions Sequence"},
654 "Extensions by name"},
656 {
"enum_types", (getter)
GetEnumsSeq, NULL,
"Enum sequence"},
658 "Enum types by name"},
660 "Enum values by name"},
662 {
"oneofs", (getter)
GetOneofsSeq, NULL,
"Oneofs by name"},
667 {
"_options", (getter)NULL, (setter)
SetOptions,
"Options"},
669 "Serialized Options"},
670 {
"syntax", (getter)
GetSyntax, (setter)NULL,
"Syntax"},
675 {
"GetOptions", (PyCFunction)
GetOptions, METH_NOARGS, },
676 {
"CopyToProto", (PyCFunction)
CopyToProto, METH_O, },
677 {
"EnumValueName", (PyCFunction)
EnumValueName, METH_VARARGS, },
725 PyErr_SetString(PyExc_TypeError,
"Not a MessageDescriptor");
732 namespace field_descriptor {
781 return PyLong_FromVoidPtr(
self);
789 return PyBool_FromLong(
_GetDescriptor(
self)->has_default_value());
796 return PyList_New(0);
852 PyErr_Format(PyExc_NotImplementedError,
"default value for %s",
909 desc->is_extension() ?
desc->extension_scope() :
nullptr;
910 if (extension_scope) {
960 {
"full_name", (getter)
GetFullName, NULL,
"Full name"},
961 {
"name", (getter)
GetName, NULL,
"Unqualified name"},
963 {
"json_name", (getter)
GetJsonName, NULL,
"Json name"},
964 {
"file", (getter)
GetFile, NULL,
"File Descriptor"},
965 {
"type", (getter)
GetType, NULL,
"C++ Type"},
966 {
"cpp_type", (getter)
GetCppType, NULL,
"C++ Type"},
967 {
"label", (getter)
GetLabel, NULL,
"Label"},
968 {
"number", (getter)
GetNumber, NULL,
"Number"},
969 {
"index", (getter)
GetIndex, NULL,
"Index"},
972 {
"is_extension", (getter)
IsExtension, NULL,
"ID"},
973 {
"id", (getter)
GetID, NULL,
"ID"},
974 {
"_cdescriptor", (getter)
GetCDescriptor, NULL,
"HAACK REMOVE ME"},
986 {
"_options", (getter)NULL, (setter)
SetOptions,
"Options"},
988 "Serialized Options"},
993 {
"GetOptions", (PyCFunction)
GetOptions, METH_NOARGS, },
1041 PyErr_SetString(PyExc_TypeError,
"Not a FieldDescriptor");
1053 return reinterpret_cast<const EnumDescriptor*
>(
self->descriptor);
1128 {
"GetOptions", (PyCFunction)
GetOptions, METH_NOARGS, },
1129 {
"CopyToProto", (PyCFunction)
CopyToProto, METH_O, },
1134 {
"full_name", (getter)
GetFullName, NULL,
"Full name"},
1135 {
"name", (getter)
GetName, NULL,
"last name"},
1136 {
"file", (getter)
GetFile, NULL,
"File descriptor"},
1139 "Enum values by name"},
1141 "Enum values by number"},
1146 {
"_options", (getter)NULL, (setter)
SetOptions,
"Options"},
1148 "Serialized Options"},
1196 PyErr_SetString(PyExc_TypeError,
"Not an EnumDescriptor");
1203 namespace enumvalue_descriptor {
1255 {
"name", (getter)
GetName, NULL,
"name"},
1256 {
"number", (getter)
GetNumber, NULL,
"number"},
1257 {
"index", (getter)
GetIndex, NULL,
"index"},
1258 {
"type", (getter)
GetType, NULL,
"index"},
1261 {
"_options", (getter)NULL, (setter)
SetOptions,
"Options"},
1263 "Serialized Options"},
1268 {
"GetOptions", (PyCFunction)
GetOptions, METH_NOARGS, },
1302 enumvalue_descriptor::
Methods,
1304 enumvalue_descriptor::
Getters,
1314 namespace file_descriptor {
1318 return reinterpret_cast<const FileDescriptor*
>(
self->base.descriptor);
1322 Py_XDECREF(
self->serialized_pb);
1327 PyObject*
pool =
reinterpret_cast<PyObject*
>(
1342 PyObject *serialized_pb =
self->serialized_pb;
1343 if (serialized_pb != NULL) {
1344 Py_INCREF(serialized_pb);
1345 return serialized_pb;
1350 file_proto.SerializePartialToString(&
contents);
1351 self->serialized_pb = PyBytes_FromStringAndSize(
1353 if (
self->serialized_pb == NULL) {
1356 Py_INCREF(
self->serialized_pb);
1357 return self->serialized_pb;
1412 return PyUnicode_InternFromString(
1421 {
"pool", (getter)
GetPool, NULL,
"pool"},
1422 {
"name", (getter)
GetName, NULL,
"name"},
1423 {
"package", (getter)
GetPackage, NULL,
"package"},
1426 "Messages by name"},
1429 "Extensions by name"},
1435 {
"_options", (getter)NULL, (setter)
SetOptions,
"Options"},
1437 "Serialized Options"},
1438 {
"syntax", (getter)
GetSyntax, (setter)NULL,
"Syntax"},
1443 {
"GetOptions", (PyCFunction)
GetOptions, METH_NOARGS, },
1444 {
"CopyToProto", (PyCFunction)
CopyToProto, METH_O, },
1455 (destructor)file_descriptor::
Dealloc,
1499 const FileDescriptor* file_descriptor, PyObject *serialized_pb) {
1503 if (py_descriptor == NULL) {
1509 Py_XINCREF(serialized_pb);
1510 cfile_descriptor->serialized_pb = serialized_pb;
1515 return py_descriptor;
1520 PyErr_SetString(PyExc_TypeError,
"Not a FileDescriptor");
1527 namespace oneof_descriptor {
1589 {
"name", (getter)
GetName, NULL,
"Name"},
1590 {
"full_name", (getter)
GetFullName, NULL,
"Full name"},
1591 {
"index", (getter)
GetIndex, NULL,
"Index"},
1595 {
"_options", (getter)NULL, (setter)
SetOptions,
"Options"},
1597 "Serialized Options"},
1598 {
"fields", (getter)
GetFields, NULL,
"Fields"},
1603 {
"GetOptions", (PyCFunction)
GetOptions, METH_NOARGS },
1649 namespace service_descriptor {
1682 Py_ssize_t name_size;
1690 if (method_descriptor == NULL) {
1691 PyErr_Format(PyExc_KeyError,
"Couldn't find method %.200s",
name);
1703 return CopyToPythonProto<ServiceDescriptorProto>(
_GetDescriptor(
self),
1708 {
"name", (getter)
GetName, NULL,
"Name", NULL},
1709 {
"full_name", (getter)
GetFullName, NULL,
"Full name", NULL},
1710 {
"file", (getter)
GetFile, NULL,
"File descriptor"},
1711 {
"index", (getter)
GetIndex, NULL,
"Index", NULL},
1713 {
"methods", (getter)
GetMethods, NULL,
"Methods", NULL},
1714 {
"methods_by_name", (getter)
GetMethodsByName, NULL,
"Methods by name", NULL},
1719 {
"GetOptions", (PyCFunction)
GetOptions, METH_NOARGS },
1720 {
"CopyToProto", (PyCFunction)
CopyToProto, METH_O, },
1769 PyErr_SetString(PyExc_TypeError,
"Not a ServiceDescriptor");
1776 namespace method_descriptor {
1821 {
"name", (getter)
GetName, NULL,
"Name", NULL},
1822 {
"full_name", (getter)
GetFullName, NULL,
"Full name", NULL},
1823 {
"index", (getter)
GetIndex, NULL,
"Index", NULL},
1825 "Containing service", NULL},
1826 {
"input_type", (getter)
GetInputType, NULL,
"Input type", NULL},
1827 {
"output_type", (getter)
GetOutputType, NULL,
"Output type", NULL},
1832 {
"GetOptions", (PyCFunction)
GetOptions, METH_NOARGS, },
1833 {
"CopyToProto", (PyCFunction)
CopyToProto, METH_O, },
1888 if (PyDict_SetItemString(
type->tp_dict,
value->name().c_str(),
obj.get()) <
1898 if (PyDict_SetItemString(
type->tp_dict,
name,
obj.get()) < 0) {
1920 #define ADD_FIELDDESC_CONSTANT(NAME) AddIntConstant( \
1921 &PyFieldDescriptor_Type, #NAME, FieldDescriptor::NAME)
1934 #undef ADD_FIELDDESC_CONSTANT
const std::string & full_name() const
PyObject * NewMessageExtensionsSeq(ParentDescriptor descriptor)
static PyObject * GetSyntax(PyFileDescriptor *self, void *closure)
PyObject * NewFileDependencies(const FileDescriptor *descriptor)
PyObject * NewMessageOneofsSeq(ParentDescriptor descriptor)
static PyObject * GetNestedTypesByName(PyBaseDescriptor *self, void *closure)
OPENSSL_EXPORT const ASN1_OBJECT * obj
const PyObject_HEAD void * descriptor
static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor * Type_descriptor()
PyObject * PyString_FromCppString(const string &str)
static PyObject * GetNestedTypesSeq(PyBaseDescriptor *self, void *closure)
static const FileOptions & default_instance()
PyTypeObject PyServiceDescriptor_Type
const Descriptor::ReservedRange value
static PyObject * GetFieldsByNumber(PyBaseDescriptor *self, void *closure)
PyObject * NewFileMessageTypesByName(ParentDescriptor descriptor)
static PyObject * GetFieldsByCamelcaseName(PyBaseDescriptor *self, void *closure)
static PyObject * GetExtensionRanges(PyBaseDescriptor *self, void *closure)
#define PyString_AsStringAndSize(ob, charpp, sizep)
PyObject * NewInternedDescriptor(PyTypeObject *type, const DescriptorClass *descriptor, bool *was_created)
static PyObject * GetNumber(PyBaseDescriptor *self, void *closure)
static PyObject * GetFields(PyBaseDescriptor *self, void *closure)
const grpc_generator::File * file
static const char * SyntaxName(Syntax syntax)
static const MethodDescriptor * _GetDescriptor(PyBaseDescriptor *self)
PyTypeObject PyEnumValueDescriptor_Type
static PyObject * GetExtensionsByName(PyFileDescriptor *self, void *closure)
PyObject * PyServiceDescriptor_FromDescriptor(const ServiceDescriptor *service_descriptor)
PyObject * NewOneofFieldsSeq(ParentDescriptor descriptor)
static PyObject * EnumValueName(PyBaseDescriptor *self, PyObject *args)
static int SetSerializedOptions(PyBaseDescriptor *self, PyObject *value, void *closure)
static PyObject * GetPublicDependencies(PyFileDescriptor *self, void *closure)
PyDescriptorPool * GetDefaultDescriptorPool()
PyObject * NewFileEnumTypesByName(ParentDescriptor descriptor)
#define ADD_FIELDDESC_CONSTANT(NAME)
static PyObject * GetJsonName(PyBaseDescriptor *self, void *closure)
static PyObject * GetFullName(PyBaseDescriptor *self, void *closure)
PyObject * ToStringObject(const FieldDescriptor *descriptor, const string &value)
static int CheckCalledFromGeneratedFile(const char *attr_name)
PyObject * NewFilePublicDependencies(const FileDescriptor *descriptor)
#define PyVarObject_HEAD_INIT(type, size)
PyObject * NewServiceMethodsByName(ParentDescriptor descriptor)
const FieldDescriptor * PyFieldDescriptor_AsDescriptor(PyObject *obj)
PyObject * PyMethodDescriptor_FromDescriptor(const MethodDescriptor *method_descriptor)
PyObject * NewMessageNestedTypesSeq(ParentDescriptor descriptor)
struct google::protobuf::python::PyDescriptorPool PyDescriptorPool
PyObject * PyEnumValueDescriptor_FromDescriptor(const EnumValueDescriptor *enumvalue_descriptor)
void CopyTo(MethodDescriptorProto *proto) const
PyObject * NewEnumValuesByNumber(ParentDescriptor descriptor)
static PyObject * GetMessageType(PyBaseDescriptor *self, void *closure)
PyObject * NewMessageExtensionsByName(ParentDescriptor descriptor)
PyObject * NewMessageEnumsByName(ParentDescriptor descriptor)
PyObject * NewMessageNestedTypesByName(ParentDescriptor descriptor)
static const OneofOptions & default_instance()
const Descriptor * output_type() const
static PyObject * GetMessageTypesByName(PyFileDescriptor *self, void *closure)
const typedef MCPhysReg * iterator
static PyObject * GetContainingType(PyBaseDescriptor *self, void *closure)
static PyObject * GetContainingOneof(PyBaseDescriptor *self, void *closure)
PyTypeObject PyBaseDescriptor_Type
static int SetMessageType(PyBaseDescriptor *self, PyObject *value, void *closure)
static const FieldOptions & default_instance()
PyObject * PyEnumDescriptor_FromDescriptor(const EnumDescriptor *enum_descriptor)
static PyObject * IsExtension(PyBaseDescriptor *self, void *closure)
PyObject * PyFieldDescriptor_FromDescriptor(const FieldDescriptor *field_descriptor)
static PyObject * GetEnumvaluesByName(PyBaseDescriptor *self, void *closure)
static bool AddEnumValues(PyTypeObject *type, const EnumDescriptor *enum_descriptor)
PyObject * PyMessageDescriptor_FromDescriptor(const Descriptor *message_descriptor)
PyTypeObject PyFileDescriptor_Type
const std::string & name() const
static PyMethodDef Methods[]
static PyObject * GetEnumsSeq(PyBaseDescriptor *self, void *closure)
static PyObject * GetEnumType(PyBaseDescriptor *self, void *closure)
PyDescriptorPool * GetDescriptorPool_FromPool(const DescriptorPool *pool)
static const EnumValueOptions & default_instance()
static PyObject * IsExtendable(PyBaseDescriptor *self, void *closure)
static PyObject * FindMethodByName(PyBaseDescriptor *self, PyObject *arg)
const Descriptor * PyMessageDescriptor_AsDescriptor(PyObject *obj)
bool InitDescriptorMappingTypes()
PyObject * NewMessageFieldsByNumber(ParentDescriptor descriptor)
static const MessageOptions & default_instance()
static int SetContainingOneof(PyBaseDescriptor *self, PyObject *value, void *closure)
constexpr size_type size() const noexcept
def c_str(s, encoding='ascii')
static PyObject * GetType(PyBaseDescriptor *self, void *closure)
static PyObject * GetEnumvaluesByNumber(PyBaseDescriptor *self, void *closure)
static PyObject * GetMethodsByName(PyBaseDescriptor *self, void *closure)
struct google::protobuf::python::PyFileDescriptor PyFileDescriptor
static int SetContainingType(PyBaseDescriptor *self, PyObject *value, void *closure)
static PyObject * GetEnumValuesByName(PyBaseDescriptor *self, void *closure)
struct google::protobuf::python::PyBaseDescriptor PyBaseDescriptor
PyTypeObject * CMessage_Type
PyMessageFactory * py_message_factory
GRPC_CUSTOM_METHODDESCRIPTOR MethodDescriptor
unsigned __int64 uint64_t
static PyObject * GetConcreteClass(PyBaseDescriptor *self, void *closure)
GRPC_CUSTOM_CODEDINPUTSTREAM CodedInputStream
const UnknownFieldSet & GetUnknownFields(const Message &message) const
PyTypeObject PyEnumDescriptor_Type
static PyObject * CopyToPythonProto(const DescriptorClass *descriptor, PyObject *target)
const ServiceDescriptor * service() const
static PyObject * GetCppType(PyBaseDescriptor *self, void *closure)
static PyObject * GetID(PyBaseDescriptor *self, void *closure)
static PyObject * GetExtensionScope(PyBaseDescriptor *self, void *closure)
static PyObject * GetExtensions(PyBaseDescriptor *self, void *closure)
static const EnumOptions & default_instance()
PyObject * NewEnumValuesByName(ParentDescriptor descriptor)
CMessageClass * GetOrCreateMessageClass(PyMessageFactory *self, const Descriptor *descriptor)
static PyObject * GetLabel(PyBaseDescriptor *self, void *closure)
static int SetEnumType(PyBaseDescriptor *self, PyObject *value, void *closure)
PyTypeObject PyMessageDescriptor_Type
static PyObject * GetIndex(PyBaseDescriptor *self, void *closure)
int AssureWritable(CMessage *self)
static void Dealloc(PyObject *pself)
static PyObject * GetOutputType(PyBaseDescriptor *self, void *closure)
PyObject * NewMessageFieldsByName(ParentDescriptor descriptor)
static PyObject * GetOrBuildOptions(const DescriptorClass *descriptor)
static int GcClear(PyObject *pself)
PyTypeObject PyFieldDescriptor_Type
PyObject * NewMessageFieldsSeq(ParentDescriptor descriptor)
static PyObject * GetFile(PyBaseDescriptor *self, void *closure)
const FileDescriptor * GetFileDescriptor(const DescriptorClass *descriptor)
PyObject * PyFileDescriptor_FromDescriptor(const FileDescriptor *file_descriptor)
static PyObject * GetOneofsSeq(PyBaseDescriptor *self, void *closure)
static PyObject * GetInputType(PyBaseDescriptor *self, void *closure)
std::unordered_map< const void *, PyObject * > * descriptor_options
static PyObject * GetCamelcaseName(PyBaseDescriptor *self, void *closure)
virtual void CopyFrom(const Message &from)
static PyObject * GetHasOptions(PyBaseDescriptor *self, void *closure)
static bool AddIntConstant(PyTypeObject *type, const char *name, int value)
std::unordered_map< const void *, PyObject * > * interned_descriptors
static PyObject * GetFieldsByName(PyBaseDescriptor *self, void *closure)
static int SetOptions(PyBaseDescriptor *self, PyObject *value, void *closure)
const Descriptor * input_type() const
const FileDescriptor * PyFileDescriptor_AsDescriptor(PyObject *obj)
PyObject * PyOneofDescriptor_FromDescriptor(const OneofDescriptor *oneof_descriptor)
static PyObject * GetEnumTypesByName(PyFileDescriptor *self, void *closure)
const void * PyDescriptor_AsVoidPtr(PyObject *obj)
static PyObject * GetEnumvaluesSeq(PyBaseDescriptor *self, void *closure)
const EnumDescriptor * PyEnumDescriptor_AsDescriptor(PyObject *obj)
PyObject * PyFileDescriptor_FromDescriptorWithSerializedPb(const FileDescriptor *file_descriptor, PyObject *serialized_pb)
static PyObject * GetFieldsSeq(PyBaseDescriptor *self, void *closure)
static PyObject * GetSerializedPb(PyFileDescriptor *self, void *closure)
static PyObject * GetName(PyBaseDescriptor *self, void *closure)
const ServiceDescriptor * PyServiceDescriptor_AsDescriptor(PyObject *obj)
static PyObject * GetServicesByName(PyFileDescriptor *self, void *closure)
PyTypeObject PyOneofDescriptor_Type
bool _CalledFromGeneratedFile(int stacklevel)
static PyObject * GetOneofsByName(PyBaseDescriptor *self, void *closure)
bool Reparse(PyMessageFactory *message_factory, const Message &from, Message *to)
static void frame(frame_handler *handler, unsigned char *payload, size_t payload_length, size_t write_length)
static PyObject * GetContainingService(PyBaseDescriptor *self, void *closure)
PyObject * NewFileExtensionsByName(ParentDescriptor descriptor)
static PyObject * GetMethods(PyBaseDescriptor *self, void *closure)
PyObject * NewMessageOneofsByName(ParentDescriptor descriptor)
static PyGetSetDef Getters[]
static PyObject * GetDependencies(PyFileDescriptor *self, void *closure)
InternalDescriptorPool * pool
static PyObject * HasDefaultValue(PyBaseDescriptor *self, void *closure)
static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor * Label_descriptor()
static PyObject * GetPackage(PyFileDescriptor *self, void *closure)
static PyObject * CopyToProto(PyBaseDescriptor *self, PyObject *target)
static PyObject * GetCDescriptor(PyObject *self, void *closure)
static int GcTraverse(PyObject *pself, visitproc visit, void *arg)
PyObject * NewFileServicesByName(const FileDescriptor *descriptor)
variant_internal::VisitResult< Visitor, Variants... > visit(Visitor &&vis, Variants &&... vars)
PyTypeObject PyMethodDescriptor_Type
static PyObject * GetOptions(PyBaseDescriptor *self)
PyObject * NewMessageEnumValuesByName(ParentDescriptor descriptor)
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
PyObject * NewServiceMethodsSeq(ParentDescriptor descriptor)
PyObject * NewMessageFieldsByCamelcaseName(ParentDescriptor descriptor)
VALUE enum_descriptor(VALUE self)
static DescriptorPool * GetPool(const zval *this_ptr)
static int SetHasOptions(PyBaseDescriptor *self, PyObject *value, void *closure)
static const char descriptor[1336]
GRPC_CUSTOM_SERVICEDESCRIPTOR ServiceDescriptor
CMessageClass * GetMessageClass(PyMessageFactory *self, const Descriptor *message_descriptor)
PyObject * NewMessageEnumsSeq(ParentDescriptor descriptor)
static PyObject * GetDefaultValue(PyBaseDescriptor *self, void *closure)
FieldDescriptor::CppType cpp_type(FieldType type)
PyObject * NewEnumValuesSeq(ParentDescriptor descriptor)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:10