1313 ResultManifest ,
1414 ResultData ,
1515 ServiceError ,
16+ ExternalLink ,
17+ ColumnInfo ,
1618)
1719
1820
@@ -42,12 +44,55 @@ def from_dict(cls, data: Dict[str, Any]) -> "ExecuteStatementResponse":
4244 error = error ,
4345 sql_state = status_data .get ("sql_state" ),
4446 )
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 ("next_chunk_internal_link" ),
82+ http_headers = link_data .get ("http_headers" ),
83+ )
84+ )
85+
86+ result = ResultData (
87+ data = result_data .get ("data_array" ),
88+ external_links = external_links ,
89+ )
4590
4691 return cls (
4792 statement_id = data .get ("statement_id" , "" ),
4893 status = status ,
49- manifest = data . get ( " manifest" ), # We'll parse this more fully if needed
50- result = data . get ( " result" ), # We'll parse this more fully if needed
94+ manifest = manifest ,
95+ result = result ,
5196 )
5297
5398
@@ -77,12 +122,55 @@ def from_dict(cls, data: Dict[str, Any]) -> "GetStatementResponse":
77122 error = error ,
78123 sql_state = status_data .get ("sql_state" ),
79124 )
125+
126+ # Parse manifest
127+ manifest = None
128+ if "manifest" in data :
129+ manifest_data = data ["manifest" ]
130+ manifest = ResultManifest (
131+ format = manifest_data .get ("format" , "" ),
132+ schema = manifest_data .get ("schema" , {}),
133+ total_row_count = manifest_data .get ("total_row_count" , 0 ),
134+ total_byte_count = manifest_data .get ("total_byte_count" , 0 ),
135+ total_chunk_count = manifest_data .get ("total_chunk_count" , 0 ),
136+ truncated = manifest_data .get ("truncated" , False ),
137+ chunks = manifest_data .get ("chunks" ),
138+ result_compression = manifest_data .get ("result_compression" ),
139+ )
140+
141+ # Parse result data
142+ result = None
143+ if "result" in data :
144+ result_data = data ["result" ]
145+ external_links = None
146+
147+ if "external_links" in result_data :
148+ external_links = []
149+ for link_data in result_data ["external_links" ]:
150+ external_links .append (
151+ ExternalLink (
152+ external_link = link_data .get ("external_link" , "" ),
153+ expiration = link_data .get ("expiration" , "" ),
154+ chunk_index = link_data .get ("chunk_index" , 0 ),
155+ byte_count = link_data .get ("byte_count" , 0 ),
156+ row_count = link_data .get ("row_count" , 0 ),
157+ row_offset = link_data .get ("row_offset" , 0 ),
158+ next_chunk_index = link_data .get ("next_chunk_index" ),
159+ next_chunk_internal_link = link_data .get ("next_chunk_internal_link" ),
160+ http_headers = link_data .get ("http_headers" ),
161+ )
162+ )
163+
164+ result = ResultData (
165+ data = result_data .get ("data_array" ),
166+ external_links = external_links ,
167+ )
80168
81169 return cls (
82170 statement_id = data .get ("statement_id" , "" ),
83171 status = status ,
84- manifest = data . get ( " manifest" ), # We'll parse this more fully if needed
85- result = data . get ( " result" ), # We'll parse this more fully if needed
172+ manifest = manifest ,
173+ result = result ,
86174 )
87175
88176
@@ -96,3 +184,36 @@ class CreateSessionResponse:
96184 def from_dict (cls , data : Dict [str , Any ]) -> "CreateSessionResponse" :
97185 """Create a CreateSessionResponse from a dictionary."""
98186 return cls (session_id = data .get ("session_id" , "" ))
187+
188+
189+ @dataclass
190+ class GetChunksResponse :
191+ """Response from getting chunks for a statement."""
192+
193+ statement_id : str
194+ external_links : List [ExternalLink ]
195+
196+ @classmethod
197+ def from_dict (cls , data : Dict [str , Any ]) -> "GetChunksResponse" :
198+ """Create a GetChunksResponse from a dictionary."""
199+ external_links = []
200+ if "external_links" in data :
201+ for link_data in data ["external_links" ]:
202+ external_links .append (
203+ ExternalLink (
204+ external_link = link_data .get ("external_link" , "" ),
205+ expiration = link_data .get ("expiration" , "" ),
206+ chunk_index = link_data .get ("chunk_index" , 0 ),
207+ byte_count = link_data .get ("byte_count" , 0 ),
208+ row_count = link_data .get ("row_count" , 0 ),
209+ row_offset = link_data .get ("row_offset" , 0 ),
210+ next_chunk_index = link_data .get ("next_chunk_index" ),
211+ next_chunk_internal_link = link_data .get ("next_chunk_internal_link" ),
212+ http_headers = link_data .get ("http_headers" ),
213+ )
214+ )
215+
216+ return cls (
217+ statement_id = data .get ("statement_id" , "" ),
218+ external_links = external_links ,
219+ )
0 commit comments