|
66 | 66 | # Fields that are numerical 64-bit types
|
67 | 67 | INT_64_TYPES = [TYPE_INT64, TYPE_UINT64, TYPE_SINT64, TYPE_FIXED64, TYPE_SFIXED64]
|
68 | 68 |
|
| 69 | +# Fields that are numerical 32-bit types |
| 70 | +INT_32_TYPES = [TYPE_INT32, TYPE_UINT32, TYPE_SINT32, TYPE_FIXED32, TYPE_SFIXED32] |
| 71 | + |
| 72 | +# Fields that are numerical types |
| 73 | +ALL_INT_TYPES = INT_64_TYPES + INT_32_TYPES |
| 74 | + |
69 | 75 | # Fields that are efficiently packed when
|
70 | 76 | PACKED_TYPES = [
|
71 | 77 | TYPE_ENUM,
|
@@ -598,7 +604,7 @@ def _value_from_dict(value: Any, meta: FieldMetadata, field_type: type) -> Any:
|
598 | 604 | return value
|
599 | 605 | raise ValueError("Enum value must be a string or an Enum instance")
|
600 | 606 |
|
601 |
| - if meta.proto_type in INT_64_TYPES: # TODO all integer types |
| 607 | + if meta.proto_type in ALL_INT_TYPES: |
602 | 608 | return int(value)
|
603 | 609 |
|
604 | 610 | if meta.proto_type == TYPE_BYTES:
|
@@ -1087,7 +1093,10 @@ def _from_dict_init(cls, mapping: Mapping[str, Any] | Any) -> Mapping[str, Any]:
|
1087 | 1093 |
|
1088 | 1094 | value_cls = cls._betterproto.cls_by_field[f"{field_name}.value"]
|
1089 | 1095 |
|
1090 |
| - value = {k: _value_from_dict(v, meta.map_meta[1], value_cls) for k, v in value.items()} |
| 1096 | + value = { |
| 1097 | + _value_from_dict(k, meta.map_meta[0], type(None)): _value_from_dict(v, meta.map_meta[1], value_cls) |
| 1098 | + for k, v in value.items() |
| 1099 | + } |
1091 | 1100 |
|
1092 | 1101 | elif meta.repeated:
|
1093 | 1102 | value = [_value_from_dict(item, meta, field_cls) for item in value]
|
|
0 commit comments