Mensagem para timeout

Olá!

Recebi um warning do CRAN por conta que em um dos meus testes do pacote deu erro. O pacote acessa uma API, então usa recursos de internet e por vezes isso dá timeout, então no teste do CRAN deu timeout, mesmo que eu fazendo o teste localmente não tenha dado. O professor que me mandou email me aconselhou:

‘Packages which use Internet resources should fail gracefully with an informative message
if the resource is not available or has changed (and not give a check warning nor error).’

A minha ideia é criar uma mensagem para quando der timeout, mas não estou conseguindo fazer isso. Por exemplo:

httr::GET("https://discourse.curso-r.com/unread", httr::timeout(1))
#> Error in curl::curl_fetch_memory(url, handle = handle): Timeout was reached: [discourse.curso-r.com] Operation timed out after 1004 milliseconds with 0 bytes received

Como eu identifico que o GET request acima deu timeout para eu retornar uma mensagem mais agradável ao usuário?

Obrigado

Douglas,

Minha recomendação para lidar com erros específicos seria usar o tryCatch(). Veja o capítulo 8 do livro Advanced R: 8 Conditions | Advanced R

Se puder dar mais uma sugestão, eu no geral gosto de usar o httptest para realizar testes estáveis de pacotes com APIs. Com esse pacote você pode capturar os resultados da API e testar em cima desse “cache” ao invés de ficar torcendo pra não dar nenhum problema no CRAN. O meu pacote scryr tem dois conjuntos de testes: um normal que roda na minha máquina e no GitHub Actions e um usando httptest para o CRAN. No final os testes ficam assim: scryr/tests/testthat at main · curso-r/scryr · GitHub

1 curtida