MCPcopy Index your code
hub / github.com/apache/fory / group_fields

Function group_fields

python/pyfory/struct.py:1008–1068  ·  view source on GitHub ↗
(type_resolver, field_names, serializers, nullable_map=None, field_infos_list=None)

Source from the content-addressed store, hash-verified

1006
1007
1008def group_fields(type_resolver, field_names, serializers, nullable_map=None, field_infos_list=None):
1009 nullable_map = nullable_map or {}
1010 field_info_map = {}
1011 if field_infos_list:
1012 field_info_map = {fi.name: fi for fi in field_infos_list}
1013 boxed_types = []
1014 nullable_boxed_types = []
1015 non_primitive_types = []
1016 collection_types = []
1017 set_types = []
1018 map_types = []
1019 other_types = []
1020 type_ids = []
1021 for field_name, serializer in zip(field_names, serializers):
1022 fi = field_info_map.get(field_name)
1023 tag_id = fi.tag_id if fi else -1
1024 if tag_id >= 0:
1025 sort_key = (0, tag_id, "")
1026 else:
1027 sort_key = (1, _to_snake_case(field_name), field_name)
1028 if serializer is None:
1029 non_primitive_types.append((_UNKNOWN_TYPE_ID, serializer, field_name, sort_key))
1030 else:
1031 type_ids.append(
1032 (
1033 type_resolver.get_type_info(serializer.type_).type_id,
1034 serializer,
1035 field_name,
1036 sort_key,
1037 )
1038 )
1039 for type_id, serializer, field_name, sort_key in type_ids:
1040 if is_union_type(type_id):
1041 type_id = TypeId.UNION
1042 is_nullable = nullable_map.get(field_name, False)
1043 if is_primitive_type(type_id):
1044 container = nullable_boxed_types if is_nullable else boxed_types
1045 else:
1046 container = non_primitive_types
1047 container.append((type_id, serializer, field_name, sort_key))
1048
1049 def numeric_sorter(item):
1050 id_ = item[0]
1051 compress = id_ in {
1052 # Signed compressed types
1053 TypeId.VARINT32,
1054 TypeId.VARINT64,
1055 TypeId.TAGGED_INT64,
1056 # Unsigned compressed types
1057 TypeId.VAR_UINT32,
1058 TypeId.VAR_UINT64,
1059 TypeId.TAGGED_UINT64,
1060 }
1061 # Sort by: compress flag, -size (largest first), type_id (lower first), field_name
1062 return int(compress), -get_primitive_type_size(id_), id_, item[3]
1063
1064 boxed_types = sorted(boxed_types, key=numeric_sorter)
1065 nullable_boxed_types = sorted(nullable_boxed_types, key=numeric_sorter)

Callers 2

_sort_fieldsFunction · 0.85
compute_struct_metaFunction · 0.85

Calls 6

is_union_typeFunction · 0.90
is_primitive_typeFunction · 0.90
_to_snake_caseFunction · 0.85
getMethod · 0.65
appendMethod · 0.45
get_type_infoMethod · 0.45

Tested by

no test coverage detected