fix: map field edge-case
This change ensures a parent is a nested type when checking if a field is a map.
This commit is contained in:
parent
204e04dd69
commit
e7133adeb3
@ -339,6 +339,9 @@ def is_map(
|
|||||||
) -> bool:
|
) -> bool:
|
||||||
"""True if proto_field_obj is a map, otherwise False."""
|
"""True if proto_field_obj is a map, otherwise False."""
|
||||||
if proto_field_obj.type == FieldDescriptorProtoType.TYPE_MESSAGE:
|
if proto_field_obj.type == FieldDescriptorProtoType.TYPE_MESSAGE:
|
||||||
|
if not hasattr(parent_message, "nested_type"):
|
||||||
|
return False
|
||||||
|
|
||||||
# This might be a map...
|
# This might be a map...
|
||||||
message_type = proto_field_obj.type_name.split(".").pop().lower()
|
message_type = proto_field_obj.type_name.split(".").pop().lower()
|
||||||
map_entry = f"{proto_field_obj.name.replace('_', '').lower()}entry"
|
map_entry = f"{proto_field_obj.name.replace('_', '').lower()}entry"
|
||||||
|
20
tests/inputs/entry/entry.proto
Normal file
20
tests/inputs/entry/entry.proto
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package entry;
|
||||||
|
|
||||||
|
// This is a minimal example of a repeated message field that caused issues when
|
||||||
|
// checking whether a message is a map.
|
||||||
|
//
|
||||||
|
// During the check wheter a field is a "map", the string "entry" is added to
|
||||||
|
// the field name, checked against the type name and then further checks are
|
||||||
|
// made against the nested type of a parent message. In this edge-case, the
|
||||||
|
// first check would pass even though it shouldn't and that would cause an
|
||||||
|
// error because the parent type does not have a "nested_type" attribute.
|
||||||
|
|
||||||
|
message Test {
|
||||||
|
repeated ExportEntry export = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ExportEntry {
|
||||||
|
string name = 1;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user