Skip to content

Commit 93afe3b

Browse files
authored
Fix Pending Bug. (#23)
As a temporary solution to #22 (although the field is not intended to be optional) we make the missing field from response optional.
1 parent 2d4ceaa commit 93afe3b

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

dune_client/models.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -127,25 +127,21 @@ class ResultMetadata:
127127
result_set_bytes: int
128128
total_row_count: int
129129
datapoint_count: int
130-
pending_time_millis: int
130+
pending_time_millis: Optional[int]
131131
execution_time_millis: int
132132

133133
@classmethod
134-
def from_dict(cls, data: dict[str, int | list[str]]) -> ResultMetadata:
134+
def from_dict(cls, data: dict[str, Any]) -> ResultMetadata:
135135
"""Constructor from dictionary. See unit test for sample input."""
136136
assert isinstance(data["column_names"], list)
137-
assert isinstance(data["result_set_bytes"], int)
138-
assert isinstance(data["total_row_count"], int)
139-
assert isinstance(data["datapoint_count"], int)
140-
assert isinstance(data["pending_time_millis"], int)
141-
assert isinstance(data["execution_time_millis"], int)
137+
pending_time = data.get("pending_time_millis", None)
142138
return cls(
143139
column_names=data["column_names"],
144-
result_set_bytes=data["result_set_bytes"],
145-
total_row_count=data["total_row_count"],
146-
datapoint_count=data["datapoint_count"],
147-
pending_time_millis=data["pending_time_millis"],
148-
execution_time_millis=data["execution_time_millis"],
140+
result_set_bytes=int(data["result_set_bytes"]),
141+
total_row_count=int(data["total_row_count"]),
142+
datapoint_count=int(data["datapoint_count"]),
143+
pending_time_millis=int(pending_time) if pending_time else None,
144+
execution_time_millis=int(data["execution_time_millis"]),
149145
)
150146

151147

tests/unit/test_models.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
TimeData,
1313
ExecutionResult,
1414
ResultMetadata,
15+
DuneError,
1516
)
1617

1718

@@ -115,6 +116,29 @@ def test_parse_status_response(self):
115116
expected, ExecutionStatusResponse.from_dict(self.status_response_data)
116117
)
117118

119+
def test_parse_known_status_response(self):
120+
# For context: https://github.com/cowprotocol/dune-client/issues/22
121+
response = {
122+
"execution_id": "01GES18035K5C4GDTY12Q79GBD",
123+
"query_id": 1317323,
124+
"state": "QUERY_STATE_COMPLETED",
125+
"submitted_at": "2022-10-07T10:53:18.822127Z",
126+
"expires_at": "2024-10-06T10:53:20.729373Z",
127+
"execution_started_at": "2022-10-07T10:53:18.823105936Z",
128+
"execution_ended_at": "2022-10-07T10:53:20.729372559Z",
129+
"result_metadata": {
130+
"column_names": ["token"],
131+
"result_set_bytes": 815,
132+
"total_row_count": 18,
133+
"datapoint_count": 18,
134+
"execution_time_millis": 1906,
135+
},
136+
}
137+
try:
138+
ExecutionStatusResponse.from_dict(response)
139+
except DuneError as err:
140+
self.fail(f"Unexpected error {err}")
141+
118142
def test_parse_status_response_completed(self):
119143
self.assertEqual(
120144
ExecutionStatusResponse(

0 commit comments

Comments
 (0)