Go to the documentation of this file.
60 #if PY_MAJOR_VERSION >= 3
61 #define PyString_FromStringAndSize PyUnicode_FromStringAndSize
62 #define PyString_FromFormat PyUnicode_FromFormat
63 #define PyInt_FromLong PyLong_FromLong
64 #if PY_VERSION_HEX < 0x03030000
65 #error "Python 3.0 - 3.2 are not supported."
67 #define PyString_AsStringAndSize(ob, charpp, sizep) \
68 (PyUnicode_Check(ob) ? ((*(charpp) = const_cast<char*>( \
69 PyUnicode_AsUTF8AndSize(ob, (sizep)))) == NULL \
72 : PyBytes_AsStringAndSize(ob, (charpp), (sizep)))
84 typedef const void* (*GetByCamelcaseNameMethod)(
PyContainer*
self,
87 typedef PyObject* (*NewObjectFromItemMethod)(
const void*
descriptor);
88 typedef const string& (*GetItemNameMethod)(
const void*
descriptor);
89 typedef const string& (*GetItemCamelcaseNameMethod)(
const void*
descriptor);
169 switch (
self->kind) {
173 Py_ssize_t name_size;
174 if (PyString_AsStringAndSize(
key, &
name, &name_size) < 0) {
175 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
183 *
item =
self->container_def->get_by_name_fn(
184 self,
string(
name, name_size));
189 char* camelcase_name;
190 Py_ssize_t name_size;
191 if (PyString_AsStringAndSize(
key, &camelcase_name, &name_size) < 0) {
192 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
200 *
item =
self->container_def->get_by_camelcase_name_fn(
201 self,
string(camelcase_name, name_size));
207 if (
number == -1 && PyErr_Occurred()) {
208 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
216 *
item =
self->container_def->get_by_number_fn(
self,
number);
220 PyErr_SetNone(PyExc_NotImplementedError);
228 const void*
item =
self->container_def->get_by_index_fn(
self,
index);
229 switch (
self->kind) {
232 const string&
name(
self->container_def->get_item_name_fn(
item));
233 return PyString_FromStringAndSize(
name.c_str(),
name.size());
238 self->container_def->get_item_camelcase_name_fn(
item));
239 return PyString_FromStringAndSize(
name.c_str(),
name.size());
243 int value =
self->container_def->get_item_number_fn(
item);
244 return PyInt_FromLong(
value);
247 PyErr_SetNone(PyExc_NotImplementedError);
255 return self->container_def->new_object_from_item_fn(
256 self->container_def->get_by_index_fn(
self,
index));
260 return self->container_def->count_fn(
self);
271 PyErr_SetObject(PyExc_KeyError,
key);
274 return self->container_def->new_object_from_item_fn(
item);
281 PyErr_Format(PyExc_TypeError,
282 "'%.200s' object does not support item assignment",
306 const char* kind =
"";
307 switch (
self->kind) {
312 kind =
"mapping by name";
315 kind =
"mapping by camelCase name";
318 kind =
"mapping by number";
321 return PyString_FromFormat(
322 "<%s %s>",
self->container_def->mapping_name, kind);
337 self->kind == other_container->
kind) {
345 if (PyList_Check(other)) {
348 if (
size != PyList_Size(other)) {
353 if (value1 ==
NULL) {
356 PyObject* value2 = PyList_GetItem(other,
index);
357 if (value2 ==
NULL) {
360 int cmp = PyObject_RichCompareBool(value1.
get(), value2, Py_EQ);
381 self->kind == other_container->
kind) {
389 if (PyDict_Check(other)) {
392 if (
size != PyDict_Size(other)) {
401 if (value1 ==
NULL) {
404 PyObject* value2 = PyDict_GetItem(other,
key.get());
405 if (value2 ==
NULL) {
409 int cmp = PyObject_RichCompareBool(value1.
get(), value2, Py_EQ);
422 if (opid != Py_EQ && opid != Py_NE) {
423 Py_INCREF(Py_NotImplemented);
424 return Py_NotImplemented;
437 if (result ^ (opid == Py_NE)) {
470 return self->container_def->new_object_from_item_fn(
item);
520 PyTuple_SET_ITEM(
obj.get(), 0,
key);
525 PyTuple_SET_ITEM(
obj.get(), 1,
value);
548 {
"get", (PyCFunction)
Get, METH_VARARGS, },
549 {
"keys", (PyCFunction)
Keys, METH_NOARGS, },
550 {
"values", (PyCFunction)
Values, METH_NOARGS, },
551 {
"items", (PyCFunction)
Items, METH_NOARGS, },
552 {
"iterkeys", (PyCFunction)
IterKeys, METH_NOARGS, },
553 {
"itervalues", (PyCFunction)
IterValues, METH_NOARGS, },
554 {
"iteritems", (PyCFunction)
IterItems, METH_NOARGS, },
607 PyErr_SetString(PyExc_IndexError,
"index out of range");
615 if (PyIndex_Check(
item)) {
617 index = PyNumber_AsSsize_t(
item, PyExc_IndexError);
618 if (
index == -1 && PyErr_Occurred())
624 reinterpret_cast<PyObject*
>(&PyList_Type),
self,
NULL));
641 if (descriptor_ptr ==
NULL) {
645 if (
self->container_def->get_item_index_fn) {
646 int index =
self->container_def->get_item_index_fn(descriptor_ptr);
651 if (
self->container_def->get_by_index_fn(
self,
index) != descriptor_ptr) {
661 if (
self->container_def->get_by_index_fn(
self,
index) == descriptor_ptr) {
675 PyErr_SetNone(PyExc_ValueError);
696 return PyInt_FromLong(0);
698 return PyInt_FromLong(1);
706 PyErr_Format(PyExc_TypeError,
707 "'%.200s' object is not a mutable sequence",
718 {
"index", (PyCFunction)
Index, METH_O, },
719 {
"count", (PyCFunction)
Count, METH_O, },
720 {
"append", (PyCFunction)
Append, METH_O, },
721 {
"__reversed__", (PyCFunction)
Reversed, METH_NOARGS, },
744 "DescriptorSequence",
791 self->container_def = container_def;
793 return reinterpret_cast<PyObject*
>(
self);
803 self->container_def = container_def;
805 return reinterpret_cast<PyObject*
>(
self);
812 PyErr_SetNone(PyExc_NotImplementedError);
820 self->container_def = container_def;
822 return reinterpret_cast<PyObject*
>(
self);
832 self->container_def = container_def;
834 return reinterpret_cast<PyObject*
>(
self);
840 Py_CLEAR(
self->container);
841 Py_TYPE(
self)->tp_free(
reinterpret_cast<PyObject*
>(
self));
845 int count =
self->container->container_def->count_fn(
self->container);
850 int index =
self->index;
852 switch (
self->kind) {
861 PyObject*
obj = PyTuple_New(2);
870 PyTuple_SET_ITEM(
obj, 0,
key);
880 PyErr_SetNone(PyExc_NotImplementedError);
887 "DescriptorContainerIterator",
934 Py_INCREF(container);
935 self->container = container;
939 return reinterpret_cast<PyObject*
>(
self);
946 namespace message_descriptor {
967 const string&
name) {
1032 namespace nested_types {
1061 "MessageNestedTypes",
1113 "MessageNestedEnums",
1136 namespace enumvalues {
1163 int enum_type_count =
GetDescriptor(
self)->enum_type_count();
1164 for (
int i = 0;
i < enum_type_count; ++
i) {
1166 int enum_value_count =
enum_type->value_count();
1167 if (
index < enum_value_count) {
1171 index -= enum_value_count;
1188 "MessageEnumValues",
1207 namespace extensions {
1236 "MessageExtensions",
1321 namespace enumvalues {
1388 namespace oneof_descriptor {
1438 namespace service_descriptor {
1500 namespace file_descriptor {
1508 namespace messages {
1604 namespace extensions {
1700 namespace dependencies {
1736 namespace public_dependencies {
1753 "FilePublicDependencies",
static PyObject * NewObjectFromItem(const void *item)
static const upb_enumdef enums[5]
static PyObject * NewMappingByNumber(DescriptorContainerDef *container_def, const void *descriptor)
static const string & GetItemName(const void *item)
PyObject * NewFileDependencies(const FileDescriptor *descriptor)
static const string & GetItemCamelcaseName(const void *item)
static DescriptorContainerDef ContainerDef
static const void * GetByName(PyContainer *self, const string &name)
int(* GetItemNumberMethod)(const void *descriptor)
GLuint const GLchar * name
int Find(PyContainer *self, PyObject *item)
static PyObject * GetItem(PyContainer *self, Py_ssize_t index)
PyObject_HEAD PyContainer * container
static const void * GetByName(PyContainer *self, const string &name)
PyObject * NewMessageExtensionsByName(ParentDescriptor descriptor)
const typedef EnumValueDescriptor * ItemDescriptor
static int SeqContains(PyContainer *self, PyObject *item)
static DescriptorContainerDef ContainerDef
const typedef EnumValueDescriptor * ItemDescriptor
static PyObject * SeqSubscript(PyContainer *self, PyObject *item)
static int Count(PyContainer *self)
static const void * GetByName(PyContainer *self, const string &name)
GetItemNameMethod get_item_name_fn
GetItemIndexMethod get_item_index_fn
const typedef MethodDescriptor * ItemDescriptor
const typedef void *(* GetByNumberMethod)(PyContainer *self, int index)
PyObject * NewMessageEnumValuesByName(ParentDescriptor descriptor)
static PyObject * Iterator_Next(PyContainerIterator *self)
static int GetItemIndex(const void *item)
static int GetItemIndex(const void *item)
static int GetItemIndex(const void *item)
PyObject * PyServiceDescriptor_FromDescriptor(const ServiceDescriptor *service_descriptor)
static int GetItemIndex(const void *item)
GLenum GLuint GLenum GLsizei length
const typedef Descriptor * ItemDescriptor
const typedef OneofDescriptor * ParentDescriptor
static int GetItemIndex(const void *item)
PyObject * NewEnumValuesByNumber(ParentDescriptor descriptor)
static const void * GetByIndex(PyContainer *self, int index)
PyObject * NewFilePublicDependencies(const FileDescriptor *descriptor)
static int GetItemIndex(const void *item)
const typedef FileDescriptor * ParentDescriptor
PyObjectStruct * get() const
PyObject * NewServiceMethodsByName(ParentDescriptor descriptor)
PHP_PROTO_OBJECT_FREE_END PHP_PROTO_OBJECT_DTOR_END intern self
static PyObject * Iter(PyContainer *self)
static PyObject * Reversed(PyContainer *self, PyObject *args)
PyObject * PyMethodDescriptor_FromDescriptor(const MethodDescriptor *method_descriptor)
static PyObject * Get(PyContainer *self, PyObject *args)
PyObject * NewMessageFieldsByName(ParentDescriptor descriptor)
static PyObject * IterValues(PyContainer *self, PyObject *args)
static const void * GetByIndex(PyContainer *self, int index)
const typedef ServiceDescriptor * ParentDescriptor
const typedef Descriptor * ParentDescriptor
GetItemCamelcaseNameMethod get_item_camelcase_name_fn
PyObject * PyEnumValueDescriptor_FromDescriptor(const EnumValueDescriptor *enumvalue_descriptor)
static PyObject * NewContainerIterator(PyContainer *mapping, PyContainerIterator::IterKind kind)
const typedef OneofDescriptor * ItemDescriptor
PyObject * NewMessageFieldsSeq(ParentDescriptor descriptor)
const PyObject_HEAD void * descriptor
PyObject *(* NewObjectFromItemMethod)(const void *descriptor)
PyObject * NewEnumValuesByName(ParentDescriptor descriptor)
PyObject * NewFileMessageTypesByName(ParentDescriptor descriptor)
static const string & GetItemName(const void *item)
NewObjectFromItemMethod new_object_from_item_fn
PyObject * NewEnumValuesSeq(ParentDescriptor descriptor)
static int GetItemNumber(const void *item)
static const void * GetByCamelcaseName(PyContainer *self, const string &name)
static const void * GetByName(PyContainer *self, const string &name)
const typedef Descriptor * ItemDescriptor
static PySequenceMethods MappingSequenceMethods
static void Iterator_Dealloc(PyContainerIterator *self)
PyObject * NewMessageNestedTypesByName(ParentDescriptor descriptor)
static int Count(PyContainer *self)
static const string & GetItemName(const void *item)
zend_class_entry * enum_type
static const void * GetByIndex(PyContainer *self, int index)
const char * mapping_name
GetItemNumberMethod get_item_number_fn
static int GetItemIndex(const void *item)
static const void * GetByIndex(PyContainer *self, int index)
static const void * GetByIndex(PyContainer *self, int index)
static const string & GetItemName(const void *item)
static const string & GetItemName(const void *item)
static PyObject * NewObjectFromItem(const void *item)
static DescriptorContainerDef ContainerDef
static const string & GetItemName(const void *item)
const typedef EnumDescriptor * ItemDescriptor
PyObjectStruct * release()
static int Count(PyContainer *self)
PyObject * PyEnumDescriptor_FromDescriptor(const EnumDescriptor *enum_descriptor)
PyObject * PyFieldDescriptor_FromDescriptor(const FieldDescriptor *field_descriptor)
static DescriptorContainerDef ContainerDef
GetByNumberMethod get_by_number_fn
static int GetItemNumber(const void *item)
PyObject * PyMessageDescriptor_FromDescriptor(const Descriptor *message_descriptor)
static PyObject * IterKeys(PyContainer *self, PyObject *args)
static const string & GetItemName(const void *item)
static int GetItemIndex(const void *item)
const typedef FieldDescriptor * ItemDescriptor
static int AssSubscript(PyContainer *self, PyObject *key, PyObject *value)
enum google::protobuf::python::PyContainerIterator::IterKind kind
PyObject * NewMessageOneofsByName(ParentDescriptor descriptor)
static DescriptorContainerDef ContainerDef
static PyMappingMethods SeqMappingMethods
static const string & GetItemName(const void *item)
GLsizei GLsizei GLuint * obj
bool InitDescriptorMappingTypes()
static PyObject * NewObjectFromItem(const void *item)
static PyObject * NewObjectFromItem(const void *item)
PyTypeObject DescriptorSequence_Type
static const string & GetItemName(const void *item)
static PyObject * Append(PyContainer *self, PyObject *args)
static DescriptorContainerDef ContainerDef
#define PyVarObject_HEAD_INIT(type, size)
static DescriptorContainerDef ContainerDef
static const void * GetByName(PyContainer *self, const string &name)
static PyObject * NewMappingByName(DescriptorContainerDef *container_def, const void *descriptor)
static const string & GetItemName(const void *item)
static int Count(PyContainer *self)
static DescriptorContainerDef ContainerDef
const typedef void *(* GetByNameMethod)(PyContainer *self, const string &name)
static const void * GetByIndex(PyContainer *self, int index)
static DescriptorContainerDef ContainerDef
static PyObject * Keys(PyContainer *self, PyObject *args)
PyObject * NewFileExtensionsByName(ParentDescriptor descriptor)
static PyMethodDef MappingMethods[]
@ KIND_ITERVALUE_REVERSED
static Py_ssize_t Length(PyContainer *self)
static PyObject * NewObjectFromItem(const void *item)
static PyObject * ContainerRepr(PyContainer *self)
static DescriptorContainerDef ContainerDef
static int Count(PyContainer *self)
static const void * GetByName(PyContainer *self, const string &name)
PyObject * NewMessageOneofsSeq(ParentDescriptor descriptor)
static const void * GetByIndex(PyContainer *self, int index)
const typedef FieldDescriptor * ItemDescriptor
const typedef string &(* GetItemNameMethod)(const void *descriptor)
PyObject * NewMessageFieldsByNumber(ParentDescriptor descriptor)
static int DescriptorMapping_Equal(PyContainer *self, PyObject *other)
const DescriptorContainerDef * container_def
static const void * GetByName(PyContainer *self, const string &name)
int(* CountMethod)(PyContainer *self)
static int Count(PyContainer *self)
static const void * GetByIndex(PyContainer *self, int index)
PyObject * NewMessageFieldsByCamelcaseName(ParentDescriptor descriptor)
static int GetItemIndex(const void *item)
const typedef EnumDescriptor * ItemDescriptor
GetByNameMethod get_by_name_fn
const typedef void *(* GetByIndexMethod)(PyContainer *self, int index)
static const void * GetByName(PyContainer *self, const string &name)
static const void * GetByName(PyContainer *self, const string &name)
static ParentDescriptor GetDescriptor(PyContainer *self)
static const string & GetItemName(const void *item)
static ParentDescriptor GetDescriptor(PyContainer *self)
static const void * GetByIndex(PyContainer *self, int index)
const SETUP_TEARDOWN_TESTCONTEXT char * key
static const void * GetByIndex(PyContainer *self, int index)
static PyObject * Items(PyContainer *self, PyObject *args)
GetByIndexMethod get_by_index_fn
static PyObject * NewObjectFromItem(const void *item)
static const void * GetByIndex(PyContainer *self, int index)
static int Count(PyContainer *self)
static const void * GetByIndex(PyContainer *self, int index)
PyObject * NewOneofFieldsSeq(ParentDescriptor descriptor)
PyObject * NewFileEnumTypesByName(ParentDescriptor descriptor)
static DescriptorContainerDef ContainerDef
PyObject * PyFileDescriptor_FromDescriptor(const FileDescriptor *file_descriptor)
static PyTypeObject ContainerIterator_Type
static PyObject * NewObjectFromItem(const void *item)
static const void * GetByNumber(PyContainer *self, int number)
static int Count(PyContainer *self)
PyObject * NewServiceMethodsSeq(ParentDescriptor descriptor)
static DescriptorContainerDef ContainerDef
static const upb_fielddef fields[107]
static PyObject * NewObjectFromItem(const void *item)
static int Count(PyContainer *self)
int(* GetItemIndexMethod)(const void *descriptor)
static PyObject * NewMappingByCamelcaseName(DescriptorContainerDef *container_def, const void *descriptor)
static const void * GetByName(PyContainer *self, const string &name)
static DescriptorContainerDef ContainerDef
GetByCamelcaseNameMethod get_by_camelcase_name_fn
static const void * GetByName(PyContainer *self, const string &name)
const typedef EnumDescriptor * ParentDescriptor
const typedef FileDescriptor * ItemDescriptor
static PyObject * RichCompare(PyContainer *self, PyObject *other, int opid)
PyObject * PyOneofDescriptor_FromDescriptor(const OneofDescriptor *oneof_descriptor)
const void * PyDescriptor_AsVoidPtr(PyObject *obj)
static DescriptorContainerDef ContainerDef
static PyObject * NewObjectFromItem(const void *item)
static PyObject * NewObjectFromItem(const void *item)
static PyObject * _NewObj_ByIndex(PyContainer *self, Py_ssize_t index)
const typedef FieldDescriptor * ItemDescriptor
VALUE enum_descriptor(VALUE self)
PyObject * NewMessageEnumsByName(ParentDescriptor descriptor)
static int Contains(PyContainer *self, PyObject *key)
static bool _GetItemByKey(PyContainer *self, PyObject *key, const void **item)
static ParentDescriptor GetDescriptor(PyContainer *self)
bool _CalledFromGeneratedFile(int stacklevel)
const typedef FieldDescriptor * ItemDescriptor
const typedef FileDescriptor * ItemDescriptor
enum google::protobuf::python::PyContainer::ContainerKind kind
PyTypeObject DescriptorMapping_Type
static ParentDescriptor GetDescriptor(PyContainer *self)
static PyObject * Values(PyContainer *self, PyObject *args)
static PyObject * Subscript(PyContainer *self, PyObject *key)
static const string & GetItemName(const void *item)
static int Count(PyContainer *self)
static const void * GetByNumber(PyContainer *self, int number)
static int Count(PyContainer *self)
const typedef ServiceDescriptor * ItemDescriptor
static PyObject * NewObjectFromItem(const void *item)
static PyObject * NewObjectFromItem(const void *item)
const typedef void *(* GetByCamelcaseNameMethod)(PyContainer *self, const string &name)
static PyMethodDef SeqMethods[]
static int Count(PyContainer *self)
static int GetItemIndex(const void *item)
static PySequenceMethods SeqSequenceMethods
static const void * GetByIndex(PyContainer *self, int index)
static int Count(PyContainer *self)
GLsizei const GLfloat * value
static const void * GetByName(PyContainer *self, const string &name)
static PyObject * Index(PyContainer *self, PyObject *item)
PyObject * NewFileServicesByName(const FileDescriptor *descriptor)
static PyObject * NewSequence(DescriptorContainerDef *container_def, const void *descriptor)
PyObject * NewMessageEnumsSeq(ParentDescriptor descriptor)
static DescriptorContainerDef ContainerDef
static const void * GetByIndex(PyContainer *self, int index)
PyObject * NewMessageNestedTypesSeq(ParentDescriptor descriptor)
static PyObject * Count(PyContainer *self, PyObject *item)
PyObject * NewMessageExtensionsSeq(ParentDescriptor descriptor)
static PyMappingMethods MappingMappingMethods
static int GetItemIndex(const void *item)
static int Count(PyContainer *self)
static PyObject * NewObjectFromItem(const void *item)
static PyObject * IterItems(PyContainer *self, PyObject *args)
static int GetItemIndex(const void *item)
static int DescriptorSequence_Equal(PyContainer *self, PyObject *other)
static ParentDescriptor GetDescriptor(PyContainer *self)
static const void * GetByIndex(PyContainer *self, int index)
static PyObject * _NewKey_ByIndex(PyContainer *self, Py_ssize_t index)
static PyObject * NewObjectFromItem(const void *item)
static int Count(PyContainer *self)
static PyObject * NewObjectFromItem(const void *item)
const typedef string &(* GetItemCamelcaseNameMethod)(const void *descriptor)
libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:50