This is a private class used to represent a Schema Node
| 980 | |
| 981 | |
| 982 | class _SchemaNode: |
| 983 | """This is a private class used to represent a Schema Node""" |
| 984 | |
| 985 | __slots__: Sequence[str] = ("name", "children", "type_str", "field") |
| 986 | |
| 987 | def __init__(self, name, type_str=''): |
| 988 | self.name = name |
| 989 | self.children = [] |
| 990 | self.type_str = type_str |
| 991 | self.field = None |
| 992 | |
| 993 | def add_child(self, name, type_str=''): |
| 994 | for child in self.children: |
| 995 | if child.name == name and child.type_str == type_str: |
| 996 | return child |
| 997 | child = _SchemaNode(name, type_str) |
| 998 | self.children.append(child) |
| 999 | return child |
| 1000 | |
| 1001 | def get_field(self): |
| 1002 | |
| 1003 | list_names = ['lengths', 'values'] |
| 1004 | map_names = ['lengths', 'keys', 'values'] |
| 1005 | |
| 1006 | if len(self.children) == 0 or self.field is not None: |
| 1007 | if self.field is None: |
| 1008 | return Struct() |
| 1009 | else: |
| 1010 | return self.field |
| 1011 | |
| 1012 | child_names = [] |
| 1013 | for child in self.children: |
| 1014 | child_names.append(child.name) |
| 1015 | |
| 1016 | if (set(child_names) == set(list_names)): |
| 1017 | for child in self.children: |
| 1018 | if child.name == 'values': |
| 1019 | values_field = child.get_field() |
| 1020 | else: |
| 1021 | lengths_field = child.get_field() |
| 1022 | self.field = List( |
| 1023 | values_field, |
| 1024 | lengths_blob=lengths_field |
| 1025 | ) |
| 1026 | self.type_str = "List" |
| 1027 | return self.field |
| 1028 | elif (set(child_names) == set(map_names)): |
| 1029 | for child in self.children: |
| 1030 | if child.name == 'keys': |
| 1031 | key_field = child.get_field() |
| 1032 | elif child.name == 'values': |
| 1033 | values_field = child.get_field() |
| 1034 | else: |
| 1035 | lengths_field = child.get_field() |
| 1036 | self.field = Map( |
| 1037 | key_field, |
| 1038 | values_field, |
| 1039 | lengths_blob=lengths_field |
no outgoing calls
no test coverage detected
searching dependent graphs…