Coder Social home page Coder Social logo

Comments (3)

eeng avatar eeng commented on August 22, 2024 1

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.

eeng avatar eeng commented on August 22, 2024

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:

  1. Crear un Afipws::RetriableNetworkError (subclase de NetworkError) para encapsular HTTPClient::ConnectTimeoutError. Los demás errores de HTTPClient podrían seguir mapeados a Afipws::NetworkError.
  2. Agregar un método retriable? a Afipws::Error (por defecto en false). Pienso en definirlo allí y no en NetworkError, ya que recuerdo que nosotros reintentábamos también ante ciertos códigos de un ResponseError, por ejemplo. Luego en NetworkError agregamos un constructor que permita setear ese valor (así lo ponemos en true para un ConnectTimeoutError.

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.

tomasmiguez avatar tomasmiguez commented on August 22, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.