@@ -57,17 +57,16 @@ def make_engine_value_decoder(
57
57
f"Type mismatch for `{ '' .join (field_path )} `: "
58
58
f"passed in { src_type_kind } , declared { dst_annotation } ({ dst_type_info .kind } )" )
59
59
60
- if dst_type_info .dataclass_type is not None or dst_type_info .namedtuple_type is not None :
61
- struct_type = dst_type_info .dataclass_type or dst_type_info .namedtuple_type
60
+ if dst_type_info .struct_type is not None :
62
61
return _make_engine_struct_value_decoder (
63
- field_path , src_type ['fields' ], struct_type )
62
+ field_path , src_type ['fields' ], dst_type_info . struct_type )
64
63
65
64
if src_type_kind in TABLE_TYPES :
66
65
field_path .append ('[*]' )
67
66
elem_type_info = analyze_type_info (dst_type_info .elem_type )
68
- if elem_type_info .dataclass_type is None and elem_type_info . namedtuple_type is None :
67
+ if elem_type_info .struct_type is None :
69
68
raise ValueError (f"Type mismatch for `{ '' .join (field_path )} `: "
70
- f"declared `{ dst_type_info .kind } `, a dataclass or namedtuple type expected" )
69
+ f"declared `{ dst_type_info .kind } `, a dataclass or NamedTuple type expected" )
71
70
engine_fields_schema = src_type ['row' ]['fields' ]
72
71
if elem_type_info .key_type is not None :
73
72
key_field_schema = engine_fields_schema [0 ]
@@ -76,16 +75,14 @@ def make_engine_value_decoder(
76
75
field_path , key_field_schema ['type' ], elem_type_info .key_type )
77
76
field_path .pop ()
78
77
value_decoder = _make_engine_struct_value_decoder (
79
- field_path , engine_fields_schema [1 :],
80
- elem_type_info .dataclass_type or elem_type_info .namedtuple_type )
78
+ field_path , engine_fields_schema [1 :], elem_type_info .struct_type )
81
79
def decode (value ):
82
80
if value is None :
83
81
return None
84
82
return {key_decoder (v [0 ]): value_decoder (v [1 :]) for v in value }
85
83
else :
86
84
elem_decoder = _make_engine_struct_value_decoder (
87
- field_path , engine_fields_schema ,
88
- elem_type_info .dataclass_type or elem_type_info .namedtuple_type )
85
+ field_path , engine_fields_schema , elem_type_info .struct_type )
89
86
def decode (value ):
90
87
if value is None :
91
88
return None
@@ -144,12 +141,8 @@ def make_closure_for_value(name: str, param: inspect.Parameter) -> Callable[[lis
144
141
make_closure_for_value (name , param )
145
142
for (name , param ) in parameters .items ()]
146
143
147
- if is_dataclass :
148
- return lambda values : dst_struct_type (
149
- * (decoder (values ) for decoder in field_value_decoder ))
150
- else : # namedtuple
151
- return lambda values : dst_struct_type (
152
- * (decoder (values ) for decoder in field_value_decoder ))
144
+ return lambda values : dst_struct_type (
145
+ * (decoder (values ) for decoder in field_value_decoder ))
153
146
154
147
def dump_engine_object (v : Any ) -> Any :
155
148
"""Recursively dump an object for engine. Engine side uses `Pythonized` to catch."""
0 commit comments