Fixed FieldDescriptor test.
diff --git a/python/descriptor.c b/python/descriptor.c
index 20f9113..f93077d 100644
--- a/python/descriptor.c
+++ b/python/descriptor.c
@@ -1609,6 +1609,14 @@
// Top Level
// -----------------------------------------------------------------------------
+static bool PyUpb_SetIntAttr(PyObject* obj, const char* name, int val) {
+ PyObject* num = PyLong_FromLong(val);
+ if (!num) return false;
+ int status = PyObject_SetAttrString(obj, name, num);
+ Py_DECREF(num);
+ return status >= 0;
+}
+
// These must be in the same order as PyUpb_DescriptorType in the header.
static PyType_Spec* desc_specs[] = {
&PyUpb_Descriptor_Spec, &PyUpb_EnumDescriptor_Spec,
@@ -1627,5 +1635,30 @@
}
}
+ PyObject* field_desc = (PyObject*)s->descriptor_types[kPyUpb_FieldDescriptor];
+ bool ok =
+ PyUpb_SetIntAttr(field_desc, "TYPE_DOUBLE", upb_FieldType_Double) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_FLOAT", upb_FieldType_Float) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_INT64", upb_FieldType_Int64) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_UINT64", upb_FieldType_UInt64) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_INT32", upb_FieldType_Int32) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_FIXED64", upb_FieldType_Fixed64) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_FIXED32", upb_FieldType_Fixed32) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_BOOL", upb_FieldType_Bool) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_STRING", upb_FieldType_String) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_GROUP", upb_FieldType_Group) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_MESSAGE", upb_FieldType_Message) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_BYTES", upb_FieldType_Bytes) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_UINT32", upb_FieldType_UInt32) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_ENUM", upb_FieldType_Enum) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_SFIXED32", upb_FieldType_SFixed32) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_SFIXED64", upb_FieldType_SFixed64) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_SINT32", upb_FieldType_SInt32) &&
+ PyUpb_SetIntAttr(field_desc, "TYPE_SINT64", upb_FieldType_SInt64) &&
+ PyUpb_SetIntAttr(field_desc, "LABEL_OPTIONAL", kUpb_Label_Optional) &&
+ PyUpb_SetIntAttr(field_desc, "LABEL_REQUIRED", kUpb_Label_Required) &&
+ PyUpb_SetIntAttr(field_desc, "LABEL_REPEATED", kUpb_Label_Repeated);
+ if (!ok) return false;
+
return true;
}
diff --git a/python/descriptor_pool.c b/python/descriptor_pool.c
index 1b0d325..b27539b 100644
--- a/python/descriptor_pool.c
+++ b/python/descriptor_pool.c
@@ -406,6 +406,11 @@
if (child) {
const upb_MessageDef* parent =
upb_DefPool_FindMessageByNameWithSize(self->symtab, name, parent_size);
+ if (parent == NULL && self->db) {
+ if (!PyUpb_DescriptorPool_TryLoadSymbol(self, arg)) return NULL;
+ parent = upb_DefPool_FindMessageByNameWithSize(self->symtab, name,
+ parent_size);
+ }
if (parent) {
f = upb_MessageDef_FindFieldByName(parent, child);
}
diff --git a/python/pb_unit_tests/descriptor_pool_test_wrapper.py b/python/pb_unit_tests/descriptor_pool_test_wrapper.py
index f97001c..dd5659d 100644
--- a/python/pb_unit_tests/descriptor_pool_test_wrapper.py
+++ b/python/pb_unit_tests/descriptor_pool_test_wrapper.py
@@ -27,12 +27,11 @@
import unittest
import copy
+# This is testing that certain methods unconditionally throw TypeError.
+# In the new extension we simply don't define them at all.
descriptor_pool_test.AddDescriptorTest.testAddTypeError.__unittest_expecting_failure__ = True
-descriptor_pool_test.AddDescriptorTest.testEnum.__unittest_expecting_failure__ = True
-descriptor_pool_test.AddDescriptorTest.testFile.__unittest_expecting_failure__ = True
-descriptor_pool_test.AddDescriptorTest.testMessage.__unittest_expecting_failure__ = True
-descriptor_pool_test.AddDescriptorTest.testService.__unittest_expecting_failure__ = True
-descriptor_pool_test.CreateDescriptorPoolTest.testFindFieldByName.__unittest_expecting_failure__ = True
+
+#descriptor_pool_test.CreateDescriptorPoolTest.testFindFieldByName.__unittest_expecting_failure__ = True
descriptor_pool_test.CreateDescriptorPoolTest.testFindService.__unittest_expecting_failure__ = True
descriptor_pool_test.CreateDescriptorPoolTest.testFindTypeErrors.__unittest_expecting_failure__ = True
descriptor_pool_test.SecondaryDescriptorFromDescriptorDB.testErrorCollector.__unittest_expecting_failure__ = True