Comments (3)
Perfecto. No creo que sean un problema esos falsos negativos. Siempre podemos ir ampliando la lista a medida que vayamos descubriendo otros casos.
from afipws.
Hola @tomasmiguez,
Gracias por la explicación detallada, tiene sentido.
Como hack rápido para resolver tu problema, la excepción original de HTTPClient
debería ser accesible a través del método cause
de la instancia de NetworkError
, así que de esa forma pueden volver a distinguir entre las distintas subclases.
No me convence mucho mapear los errores de HTTPClient
a los nuestros, porque todas las gem alternativas a ésta tiran errores diferentes. Con lo cual, si alguna vez decidimos cambiar de gem HTTP, no creo que podamos mantener la misma API.
Por otro lado, sí parece útil que el cliente de esta gem pueda saber si el error es retriable o no, sin tener que referenciar a a la gem que hace los requests por detrás. Y esa característica sí es lo suficientemente general para ser aplicada a todas las gems. Se me ocurren dos opciones:
- Crear un
Afipws::RetriableNetworkError
(subclase deNetworkError
) para encapsularHTTPClient::ConnectTimeoutError
. Los demás errores deHTTPClient
podrían seguir mapeados aAfipws::NetworkError
. - Agregar un método
retriable?
aAfipws::Error
(por defecto enfalse
). Pienso en definirlo allí y no enNetworkError
, ya que recuerdo que nosotros reintentábamos también ante ciertos códigos de unResponseError
, por ejemplo. Luego enNetworkError
agregamos un constructor que permita setear ese valor (así lo ponemos entrue
para unConnectTimeoutError
.
Me inclino por la opción 2 ya que me parece más flexible. Qué opinás? En este momento no puedo dedicarle tiempo para implementarlo. Pero si están de acuerdo y dispuestos, adelante por supuesto, ni bien tengas el PR avisame y lo revisamos.
Saludos!
from afipws.
Dale, tiene sentido lo que mencionas. Voy a intentar implementarlo y paso el PR cuando esté.
Las únicas 2 consideraciones serían que esta interfaz sea medio rara, nunca vi una gema que haga algo parecido. Y la otra que en primera instancia el único error que respondería true sería el de ConnectTimeoutError, así que hasta que se agreguen nuevos habría muchos falsos negativos en ese aspecto, pero si eso no molesta puedo probar de implementarlo.
from afipws.
Related Issues (9)
- PDF Constancia de Inscripción HOT 4
- Sslv3 alert handshake failure HOT 21
- Consulta HOT 1
- Actualización Savon HOT 1
- Cache en disco y recuperacion del Ticket de Acceso HOT 2
- Errores no encapsulados. HOT 1
- dh key too small
- Padron A5 HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from afipws.