Skip to content

Commit 620ca6e

Browse files
authored
Cargo Upgrade (#27)
Upgrading dependencies and ensuring CI still passes. Required some updates on field expectations and dune date parsing.
1 parent d5ae19b commit 620ca6e

File tree

4 files changed

+48
-15
lines changed

4 files changed

+48
-15
lines changed

Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ license = "MIT OR Apache-2.0"
1111
keywords = ["dune", "ethereum", "api-client", "web3", "dune-analytics"]
1212

1313
[dependencies]
14-
chrono = { version = "0.4.37", features = ["serde"] }
14+
chrono = { version = "0.4.42", features = ["serde"] }
1515
dotenv = "0.15.0"
16-
log = "0.4.21"
17-
reqwest = { version = "0.12.3", features = ["json"] }
18-
serde = { version = "1.0.197", features = ["derive"] }
19-
serde_json = "1.0.115"
20-
serde_with = "3.7.0"
21-
tokio = { version = "1.37.0", features = ["full"] }
16+
log = "0.4.28"
17+
reqwest = { version = "0.12.24", features = ["json"] }
18+
serde = { version = "1.0.228", features = ["derive"] }
19+
serde_json = "1.0.145"
20+
serde_with = "3.15.1"
21+
tokio = { version = "1.48.0", features = ["full"] }

src/client.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ const BASE_URL: &str = "https://api.dune.com/api/v1";
2424
/// - GET
2525
/// - get_status
2626
/// - get_results
27-
/// Furthermore, this interface also implements a convenience method `refresh`
28-
/// which acts as follows:
27+
///
28+
/// Furthermore, this interface also implements a convenience method `refresh` which acts as follows:
2929
/// 1. Execute query
3030
/// 2. While execution status is not in a terminal state, sleep and check again
3131
/// 3. Get and return execution results.
@@ -149,12 +149,12 @@ impl DuneClient {
149149
/// 3. fetch and return query results.
150150
/// # Arguments
151151
/// * `query_id` - an integer representing query ID
152-
/// (found at the end of a Dune Query URL: [https://dune.com/queries/971694](https://dune.com/queries/971694))
152+
/// (found at the end of a Dune Query URL: [https://dune.com/queries/971694](https://dune.com/queries/971694))
153153
/// * `parameters` - an optional list of query `Parameter`
154-
/// (cf. [https://dune.xyz/queries/3238619](https://dune.xyz/queries/3238619))
154+
/// (cf. [https://dune.xyz/queries/3238619](https://dune.xyz/queries/3238619))
155155
/// * `ping_frequency` - how frequently (in seconds) should the loop check execution status.
156-
/// Default is 5 seconds. Too frequently could result in rate limiting
157-
/// (i.e. Too Many Requests) especially when executing multiple queries in parallel.
156+
/// Default is 5 seconds. Too frequently could result in rate limiting
157+
/// (i.e. Too Many Requests) especially when executing multiple queries in parallel.
158158
///
159159
/// # Examples
160160
/// ```
@@ -222,7 +222,7 @@ mod tests {
222222
use serde::Deserialize;
223223

224224
const QUERY_ID: u32 = 971694;
225-
const JOB_ID: &str = "01GMZ8R4NPPQZCWYJRY2K03MH0";
225+
const JOB_ID: &str = "01K9QTN27XQTXQV59BKBJ4GKFW";
226226

227227
#[tokio::test]
228228
async fn invalid_api_key() {
@@ -304,7 +304,7 @@ mod tests {
304304
let rows = results.result.rows;
305305
assert_eq!(1, rows.len());
306306
assert_eq!(rows[0].symbol, "WETH");
307-
assert_eq!(rows[0].token, "\\xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2");
307+
assert_eq!(rows[0].token, "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2");
308308
assert!(rows[0].max_price > 4148.0)
309309
}
310310

src/parse_utils.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ pub fn date_parse(date_str: &str) -> Result<DateTime<Utc>, ParseError> {
1414

1515
/// The Date format returned from data fields of type timestamp.
1616
pub fn dune_date(date_str: &str) -> Result<DateTime<Utc>, ParseError> {
17+
// Try with microseconds first
1718
date_string_parser(date_str, "%Y-%m-%d %H:%M:%S.%f")
19+
.or_else(|_| date_string_parser(date_str, "%Y-%m-%d %H:%M:%S"))
1820
}
1921

2022
pub fn datetime_from_str<'de, D>(deserializer: D) -> Result<DateTime<Utc>, D::Error>
@@ -81,4 +83,13 @@ mod tests {
8183
"2022-05-04 00:00:00 UTC"
8284
)
8385
}
86+
87+
#[test]
88+
fn dune_date_without_microseconds() {
89+
let date_str = "2022-05-04 00:00:00";
90+
assert_eq!(
91+
dune_date(date_str).unwrap().to_string(),
92+
"2022-05-04 00:00:00 UTC"
93+
)
94+
}
8495
}

src/response.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,13 @@ pub struct CancellationResponse {
6666
#[derive(Deserialize, Debug)]
6767
pub struct ResultMetaData {
6868
pub column_names: Vec<String>,
69+
#[serde(default)]
70+
pub column_types: Option<Vec<String>>,
71+
#[serde(default)]
72+
pub row_count: Option<u32>,
6973
pub result_set_bytes: u64,
74+
#[serde(default)]
75+
pub total_result_set_bytes: Option<u64>,
7076
pub total_row_count: u32,
7177
pub datapoint_count: u32,
7278
pub pending_time_millis: Option<u32>,
@@ -129,6 +135,8 @@ pub struct ExecutionResult<T> {
129135
pub struct GetResultResponse<T> {
130136
pub execution_id: String,
131137
pub query_id: u32,
138+
#[serde(default)]
139+
pub is_execution_finished: Option<bool>,
132140
pub state: ExecutionStatus,
133141
// TODO - this `flatten` isn't what I had hoped for.
134142
// I want the `times` field to disappear
@@ -222,7 +230,10 @@ mod tests {
222230
queue_position: Some(10),
223231
result_metadata: Some(ResultMetaData {
224232
column_names: vec![],
233+
column_types: None,
234+
row_count: None,
225235
result_set_bytes: 0,
236+
total_result_set_bytes: None,
226237
total_row_count: 0,
227238
datapoint_count: 0,
228239
pending_time_millis: None,
@@ -244,7 +255,10 @@ mod tests {
244255
queue_position: Some(10), \
245256
result_metadata: Some(ResultMetaData { \
246257
column_names: [], \
258+
column_types: None, \
259+
row_count: None, \
247260
result_set_bytes: 0, \
261+
total_result_set_bytes: None, \
248262
total_row_count: 0, \
249263
datapoint_count: 0, \
250264
pending_time_millis: None, \
@@ -258,6 +272,7 @@ mod tests {
258272
GetResultResponse {
259273
execution_id: execution_id.to_string(),
260274
query_id,
275+
is_execution_finished: None,
261276
state: ExecutionStatus::Complete,
262277
times: ExecutionTimes {
263278
submitted_at: Default::default(),
@@ -270,7 +285,10 @@ mod tests {
270285
rows: vec![],
271286
metadata: ResultMetaData {
272287
column_names: vec![],
288+
column_types: None,
289+
row_count: None,
273290
result_set_bytes: 0,
291+
total_result_set_bytes: None,
274292
total_row_count: 0,
275293
datapoint_count: 0,
276294
pending_time_millis: None,
@@ -282,6 +300,7 @@ mod tests {
282300
"GetResultResponse { \
283301
execution_id: \"jerb ID\", \
284302
query_id: 71, \
303+
is_execution_finished: None, \
285304
state: Complete, \
286305
times: ExecutionTimes { \
287306
submitted_at: 1970-01-01T00:00:00Z, \
@@ -294,7 +313,10 @@ mod tests {
294313
rows: [], \
295314
metadata: ResultMetaData { \
296315
column_names: [], \
316+
column_types: None, \
317+
row_count: None, \
297318
result_set_bytes: 0, \
319+
total_result_set_bytes: None, \
298320
total_row_count: 0, \
299321
datapoint_count: 0, \
300322
pending_time_millis: None, \

0 commit comments

Comments
 (0)