I created a patch against the trunk, tested it and attached to the newly created ticket 310.

Hopefully you will find it useful

Best regards

On Wed, Apr 28, 2010 at 00:23, Daniel Rodriguez <danjrod@gmail.com> wrote:
Hi Jeff,

I was reworking the error managing of the library I have built on top of Suds and I think that the Exceptions raised by Suds could be reworked to allow a finer "catching" granularity, without impacting the current system.

I assume that Suds does only raise exceptions defined in suds/__init__.py and then:
  • All defined exceptions but WebFault belong to the pre-network stage.
  • WebFault belongs to the the post-network stage (suds can only detect a "webfault" once it has seen the answer from the server
It is obvious, in my opinion, that some people would like to treat those 2 groups of exceptions differently and maybe have just to "excepts" handling the potential cases. But this is difficult, given that all exceptions are derived from "Exception".

An initial proposal would then be:
  • Have a "SudsError" (derived from Exception) that will act as a base class for all Suds exceptions.
  • Derive (obviously) all exceptions from "SudsError"
This would allow implementing the following:

try:
  mysudsclient.callmethod(param)
except suds.WebFault as wf:
  doSomethingWithTheWebFault(wf)
except suds.SudsError as se:
  doSomethingWithSudsError(se)
except Exception as ex:
  doSomethingWithRegularPythonException(ex)

Even standard SudsError exceptions can be separated from standard Python Exceptions and handled separately.

This is, again in my opinion, straightforward and poses no change to the existing interface, while delivering (as stated above) a greater  control over exception handling in suds.

I can implement a patch if you think that this approach is something interesting for suds.

Best regards

Daniel