[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Pulp-list] Errors in controllers



I was thinking about the deep dive yesterday and I think slagle's got a really good idea on the changes we should make to the error serialization.

We already have a hook deep in the bowels of our web stuff to catch any unexpected exceptions, wrap them in our standard format, and raise them as 500s. That hook could look for one of a standard set of base exceptions (~6 I'd guess) and wrap with the appropriate status code.

The exception base classes would come out of the manager layer. Conceptually, it's not REST-specific for the manager layer to identify a distinction between "missing" and "bad data". Each manager can subclass those as necessary/appropriate. That keeps the manager layer front-end-agnostic but gives the info the REST layer needs.

So somewhere in our web layer, something like:

try:
  # any controller method
except MissingResource, e:
  serialize_404(e)
except BadData, e:
  serialize_400(e)
except DuplicateId, e:
  serialize_409(e)
except Exception, e:
  serialize_500(e)

That should remove some of the busy-work from the controllers since the call to the managers shouldn't need to be wrapped in any exception handling, they can bubble up and be handled by the web framework. We just need to be very careful that the managers are written using the right exceptions.

We'll still need access to the serialize methods for cases where it's a non-exception case (e.g. missing parameter from the request body), but that's the rare case.

--
Jay Dobies
Freenode: jdob @ #pulp
http://pulpproject.org | http://blog.pulpproject.org


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]