Skip to content

Commit bcda8b7

Browse files
authored
Bugfix (#283)
* Avoid pick_driver deprecation fixes #282 * Update load_sprint to handle Jolpica changes fixes #281 * Update load_sprint testing to check both variations
1 parent ed6f01d commit bcda8b7

3 files changed

Lines changed: 60 additions & 25 deletions

File tree

R/load_driver_telemetry.R

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,15 @@ load_driver_telemetry <- function(season = get_current_season(), round = 1, sess
6868
}
6969

7070
if (laps == "fastest") {
71-
reticulate::py_run_string(glue::glue("tel = session.laps.pick_driver('{driver}').pick_fastest().get_telemetry().add_distance().add_driver_ahead()",
71+
reticulate::py_run_string(glue::glue("tel = session.laps.pick_drivers('{driver}').pick_fastest().get_telemetry().add_distance().add_driver_ahead()",
7272
driver = driver
7373
))
7474
} else if (laps != "all") {
75-
reticulate::py_run_string(glue::glue("tel = session.laps.pick_driver('{driver}').pick_lap({laps}).get_telemetry().add_distance().add_driver_ahead()",
75+
reticulate::py_run_string(glue::glue("tel = session.laps.pick_drivers('{driver}').pick_lap({laps}).get_telemetry().add_distance().add_driver_ahead()",
7676
driver = driver, laps = laps
7777
))
7878
} else {
79-
reticulate::py_run_string(glue::glue("tel = session.laps.pick_driver('{driver}').get_telemetry().add_distance().add_driver_ahead()",
79+
reticulate::py_run_string(glue::glue("tel = session.laps.pick_drivers('{driver}').get_telemetry().add_distance().add_driver_ahead()",
8080
driver = driver
8181
))
8282
}

R/load_sprint.R

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@
1515
#' or NULL if no sprint exists for this season/round combo
1616
load_sprint <- function(season = get_current_season(), round = "last") {
1717
if (season != "current" && (season < 2021 || season > get_current_season())) {
18-
cli::cli_abort('{.var season} must be between 2021 and {get_current_season()} (or use "current")')
18+
cli::cli_abort(
19+
'{.var season} must be between 2021 and {get_current_season()} (or use "current")'
20+
)
1921
}
2022

21-
url <- glue::glue("{season}/{round}/sprint.json?limit=40",
22-
season = season, round = round
23+
url <- glue::glue(
24+
"{season}/{round}/sprint.json?limit=40",
25+
season = season,
26+
round = round
2327
)
2428

2529
data <- get_jolpica_content(url)
@@ -29,38 +33,63 @@ load_sprint <- function(season = get_current_season(), round = "last") {
2933
}
3034

3135
if (length(data$MRData$RaceTable$Races) == 0) {
32-
cli::cli_alert_warning(glue::glue("No Sprint data for season = {season}, round = {round}",
33-
season = season, round = round
36+
cli::cli_alert_warning(glue::glue(
37+
"No Sprint data for season = {season}, round = {round}",
38+
season = season,
39+
round = round
3440
))
3541
return(NULL)
3642
}
3743

3844
data <- data$MRData$RaceTable$Races$SprintResults[[1]]
3945

40-
data %>%
46+
data <- data %>%
4147
tidyr::unnest(
4248
cols = c("Driver", "Constructor", "Time", "FastestLap"),
4349
names_repair = "universal"
4450
) %>%
4551
tidyr::unnest(
4652
cols = c("Time"),
4753
names_repair = "universal"
48-
) %>%
49-
suppressWarnings() %>%
50-
suppressMessages() %>%
51-
dplyr::select(
52-
"driverId",
53-
"constructorId",
54-
"points",
55-
"position",
56-
"grid",
57-
"laps",
58-
"status",
59-
"position",
60-
gap = "time...21",
61-
"lap",
62-
fastest = "time...23"
63-
) %>%
54+
)
55+
56+
if ("time...24" %in% names(data)) {
57+
data <- data %>%
58+
suppressWarnings() %>%
59+
suppressMessages() %>%
60+
dplyr::select(
61+
"driverId",
62+
"constructorId",
63+
"points",
64+
"position",
65+
"grid",
66+
"laps",
67+
"status",
68+
"position",
69+
gap = "time...21",
70+
"lap",
71+
fastest = "time...24"
72+
)
73+
} else {
74+
data <- data %>%
75+
suppressWarnings() %>%
76+
suppressMessages() %>%
77+
dplyr::select(
78+
"driverId",
79+
"constructorId",
80+
"points",
81+
"position",
82+
"grid",
83+
"laps",
84+
"status",
85+
"position",
86+
gap = "time...21",
87+
"lap",
88+
fastest = "time...23"
89+
)
90+
}
91+
92+
data %>%
6493
dplyr::mutate(time_sec = time_to_sec(.data$fastest)) %>%
6594
tibble::as_tibble() %>%
6695
janitor::clean_names()

tests/testthat/test-load_sprint.R

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ test_that("load_sprint works", {
1717
expect_equal(sprint_2021_10$driver_id[3], "bottas")
1818
expect_equal(sprint_2021_10$position[1], "1")
1919

20+
sprint_2025_2 <- load_sprint(2025, 2)
21+
22+
expect_equal(nrow(sprint_2025_2), 20)
23+
expect_equal(sprint_2025_2$driver_id[1], "hamilton")
24+
expect_equal(sprint_2025_2$position[1], "1")
25+
2026
expect_error(load_sprint(3050, 2), "`season` must be between 2021 and *")
2127

2228
# A sprint doesn't exist for season = 2021, round = 11

0 commit comments

Comments
 (0)