13
13
ResultManifest ,
14
14
ResultData ,
15
15
ServiceError ,
16
+ ExternalLink ,
17
+ ColumnInfo ,
16
18
)
17
19
18
20
@@ -37,20 +39,62 @@ def from_dict(cls, data: Dict[str, Any]) -> "ExecuteStatementResponse":
37
39
error_code = error_data .get ("error_code" ),
38
40
)
39
41
40
- state = CommandState .from_sea_state (status_data .get ("state" , "" ))
41
- if state is None :
42
- raise ValueError (f"Invalid state: { status_data .get ('state' , '' )} " )
43
42
status = StatementStatus (
44
- state = state ,
43
+ state = CommandState . from_sea_state ( status_data . get ( " state" , "" )) ,
45
44
error = error ,
46
45
sql_state = status_data .get ("sql_state" ),
47
46
)
48
47
48
+ # Parse manifest
49
+ manifest = None
50
+ if "manifest" in data :
51
+ manifest_data = data ["manifest" ]
52
+ manifest = ResultManifest (
53
+ format = manifest_data .get ("format" , "" ),
54
+ schema = manifest_data .get ("schema" , {}),
55
+ total_row_count = manifest_data .get ("total_row_count" , 0 ),
56
+ total_byte_count = manifest_data .get ("total_byte_count" , 0 ),
57
+ total_chunk_count = manifest_data .get ("total_chunk_count" , 0 ),
58
+ truncated = manifest_data .get ("truncated" , False ),
59
+ chunks = manifest_data .get ("chunks" ),
60
+ result_compression = manifest_data .get ("result_compression" ),
61
+ )
62
+
63
+ # Parse result data
64
+ result = None
65
+ if "result" in data :
66
+ result_data = data ["result" ]
67
+ external_links = None
68
+
69
+ if "external_links" in result_data :
70
+ external_links = []
71
+ for link_data in result_data ["external_links" ]:
72
+ external_links .append (
73
+ ExternalLink (
74
+ external_link = link_data .get ("external_link" , "" ),
75
+ expiration = link_data .get ("expiration" , "" ),
76
+ chunk_index = link_data .get ("chunk_index" , 0 ),
77
+ byte_count = link_data .get ("byte_count" , 0 ),
78
+ row_count = link_data .get ("row_count" , 0 ),
79
+ row_offset = link_data .get ("row_offset" , 0 ),
80
+ next_chunk_index = link_data .get ("next_chunk_index" ),
81
+ next_chunk_internal_link = link_data .get (
82
+ "next_chunk_internal_link"
83
+ ),
84
+ http_headers = link_data .get ("http_headers" ),
85
+ )
86
+ )
87
+
88
+ result = ResultData (
89
+ data = result_data .get ("data_array" ),
90
+ external_links = external_links ,
91
+ )
92
+
49
93
return cls (
50
94
statement_id = data .get ("statement_id" , "" ),
51
95
status = status ,
52
- manifest = data . get ( " manifest" ), # We'll parse this more fully if needed
53
- result = data . get ( " result" ), # We'll parse this more fully if needed
96
+ manifest = manifest ,
97
+ result = result ,
54
98
)
55
99
56
100
@@ -75,21 +119,62 @@ def from_dict(cls, data: Dict[str, Any]) -> "GetStatementResponse":
75
119
error_code = error_data .get ("error_code" ),
76
120
)
77
121
78
- state = CommandState .from_sea_state (status_data .get ("state" , "" ))
79
- if state is None :
80
- raise ValueError (f"Invalid state: { status_data .get ('state' , '' )} " )
81
-
82
122
status = StatementStatus (
83
- state = state ,
123
+ state = CommandState . from_sea_state ( status_data . get ( " state" , "" )) ,
84
124
error = error ,
85
125
sql_state = status_data .get ("sql_state" ),
86
126
)
87
127
128
+ # Parse manifest
129
+ manifest = None
130
+ if "manifest" in data :
131
+ manifest_data = data ["manifest" ]
132
+ manifest = ResultManifest (
133
+ format = manifest_data .get ("format" , "" ),
134
+ schema = manifest_data .get ("schema" , {}),
135
+ total_row_count = manifest_data .get ("total_row_count" , 0 ),
136
+ total_byte_count = manifest_data .get ("total_byte_count" , 0 ),
137
+ total_chunk_count = manifest_data .get ("total_chunk_count" , 0 ),
138
+ truncated = manifest_data .get ("truncated" , False ),
139
+ chunks = manifest_data .get ("chunks" ),
140
+ result_compression = manifest_data .get ("result_compression" ),
141
+ )
142
+
143
+ # Parse result data
144
+ result = None
145
+ if "result" in data :
146
+ result_data = data ["result" ]
147
+ external_links = None
148
+
149
+ if "external_links" in result_data :
150
+ external_links = []
151
+ for link_data in result_data ["external_links" ]:
152
+ external_links .append (
153
+ ExternalLink (
154
+ external_link = link_data .get ("external_link" , "" ),
155
+ expiration = link_data .get ("expiration" , "" ),
156
+ chunk_index = link_data .get ("chunk_index" , 0 ),
157
+ byte_count = link_data .get ("byte_count" , 0 ),
158
+ row_count = link_data .get ("row_count" , 0 ),
159
+ row_offset = link_data .get ("row_offset" , 0 ),
160
+ next_chunk_index = link_data .get ("next_chunk_index" ),
161
+ next_chunk_internal_link = link_data .get (
162
+ "next_chunk_internal_link"
163
+ ),
164
+ http_headers = link_data .get ("http_headers" ),
165
+ )
166
+ )
167
+
168
+ result = ResultData (
169
+ data = result_data .get ("data_array" ),
170
+ external_links = external_links ,
171
+ )
172
+
88
173
return cls (
89
174
statement_id = data .get ("statement_id" , "" ),
90
175
status = status ,
91
- manifest = data . get ( " manifest" ), # We'll parse this more fully if needed
92
- result = data . get ( " result" ), # We'll parse this more fully if needed
176
+ manifest = manifest ,
177
+ result = result ,
93
178
)
94
179
95
180
@@ -103,3 +188,38 @@ class CreateSessionResponse:
103
188
def from_dict (cls , data : Dict [str , Any ]) -> "CreateSessionResponse" :
104
189
"""Create a CreateSessionResponse from a dictionary."""
105
190
return cls (session_id = data .get ("session_id" , "" ))
191
+
192
+
193
+ @dataclass
194
+ class GetChunksResponse :
195
+ """Response from getting chunks for a statement."""
196
+
197
+ statement_id : str
198
+ external_links : List [ExternalLink ]
199
+
200
+ @classmethod
201
+ def from_dict (cls , data : Dict [str , Any ]) -> "GetChunksResponse" :
202
+ """Create a GetChunksResponse from a dictionary."""
203
+ external_links = []
204
+ if "external_links" in data :
205
+ for link_data in data ["external_links" ]:
206
+ external_links .append (
207
+ ExternalLink (
208
+ external_link = link_data .get ("external_link" , "" ),
209
+ expiration = link_data .get ("expiration" , "" ),
210
+ chunk_index = link_data .get ("chunk_index" , 0 ),
211
+ byte_count = link_data .get ("byte_count" , 0 ),
212
+ row_count = link_data .get ("row_count" , 0 ),
213
+ row_offset = link_data .get ("row_offset" , 0 ),
214
+ next_chunk_index = link_data .get ("next_chunk_index" ),
215
+ next_chunk_internal_link = link_data .get (
216
+ "next_chunk_internal_link"
217
+ ),
218
+ http_headers = link_data .get ("http_headers" ),
219
+ )
220
+ )
221
+
222
+ return cls (
223
+ statement_id = data .get ("statement_id" , "" ),
224
+ external_links = external_links ,
225
+ )
0 commit comments