tidyverse / googlesheets4

Google Spreadsheets R API (reboot of the googlesheets package)
https://googlesheets4.tidyverse.org
Other
357 stars 51 forks source link

misleading error if non-existent path used for gs4_auth() #300

Closed nick-youngblut closed 11 months ago

nick-youngblut commented 11 months ago

Command:

googlesheets4::gs4_auth(path="non-existent_path.json")

Output:

Error in `googlesheets4::gs4_auth()`:
! `path` does not represent a service account.
Did you provide the JSON for an OAuth client instead of for a service account?
Use `gs4_auth_configure()` to configure the OAuth client.
Run `rlang::last_trace()` to see where the error occurred.

It would help to have a check for whether the json file exists, and if not, provide an error stating that the provided path is incorrect.

sessionInfo

R version 4.3.1 (2023-06-16)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Ventura 13.3

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: America/Los_Angeles
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
[1] googlesheets4_1.1.1 shinyBS_0.61.1      shiny_1.7.5        

loaded via a namespace (and not attached):
 [1] jsonlite_1.8.7    compiler_4.3.1    renv_1.0.2        promises_1.2.1    Rcpp_1.0.11       later_1.3.1      
 [7] fastmap_1.1.1     mime_0.12         R6_2.5.1          curl_5.1.0        tibble_3.2.1      openssl_2.1.1    
[13] pillar_1.9.0      rlang_1.1.1       utf8_1.2.3        httpuv_1.6.11     fs_1.6.3          cli_3.6.1        
[19] magrittr_2.0.3    digest_0.6.33     xtable_1.8-4      askpass_1.2.0     rappdirs_0.3.3    lifecycle_1.0.3  
[25] vctrs_0.6.3       gargle_1.5.2      glue_1.6.2        cellranger_1.1.0  googledrive_2.1.1 fansi_1.0.5      
[31] purrr_1.0.2       httr_1.4.7        tools_4.3.1       pkgconfig_2.0.3   ellipsis_0.3.2    htmltools_0.5.6.1
jennybc commented 11 months ago

It's basically impossible to do much better than this, because path is actually passed through to jsonlite::fromJSON() and, yeah, it's often a filepath, but is could be "a JSON string, URL or file". See the docs for gs4_auth():

https://googlesheets4.tidyverse.org/reference/gs4_auth.html#arguments

gargle (and therefore packages like googlesheets4) actually use this functionality, i.e. the possibility of providing a JSON string. So, I can tell if the attempt to use path failed, but I can't tell if the user meant to provide a filepath or a JSON string.

I'm sort of assuming/hoping that the fact you saw this message at all did help you diagnose and fix your problem. In the past, we didn't even have this!

jennybc commented 11 months ago

Upon further though, maybe I can improve on this message. I'll open an issue about it in gargle (which is where the error comes from).