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:
|
||||
"""True if proto_field_obj is a map, otherwise False."""
|
||||
if proto_field_obj.type == FieldDescriptorProtoType.TYPE_MESSAGE:
|
||||
if not hasattr(parent_message, "nested_type"):
|
||||
return False
|
||||
|
||||
# This might be a map...
|
||||
message_type = proto_field_obj.type_name.split(".").pop().lower()
|
||||
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