[Fedora-suds-list] Exceptions

Joshua J. Kugler joshua at eeinternet.com
Mon Jun 14 21:46:07 UTC 2010


On Monday 14 June 2010, Edwin Vane elucidated thus:
> I answered my own question:
>
> Use python's introspection function getattr() to get an attribute by
> name. e.g.:
>
> getattr(ex.fault.detail, 'com.atlassian...')

Suds creates objects that can use getattr and getitem, so you can also 
do:

ex.fault.detail['com.atlassian.jira.rpc.exception.RemotePermissionException']

So, you have a choice.  The dict accessors feel "cleaner" to me when I 
can't use the object 'dot styles' accessors.

Hope that helps!

j

>
> On Mon, Jun 14, 2010 at 5:28 PM, Edwin Vane <revane at gmail.com> wrote:
> > That's just what I needed. Thanks!
> >
> > So when I print out fault.detail I find this curious attribute:
> >
> >      (detail){
> >         com.atlassian.jira.rpc.exception.RemotePermissionException
> > = "" hostname = ""
> >      }
> >
> > Maybe this is a language question but how do we access an attribute
> > whose name contains periods?
> >
> > On Mon, Jun 14, 2010 at 4:28 PM, Joshua J. Kugler 
<joshua at eeinternet.com> wrote:
> >> On Monday 14 June 2010, Edwin Vane elucidated thus:
> >>> I apologize if these questions have been asked before. I wasn't
> >>> able to find a mailing list archive search.
> >>>
> >>> Is there an easy way to determine the SOAP exception object that
> >>> was raised from a suds.WebFault? It looks to me that using
> >>> __str__ and trying to parse the string is the only way to get the
> >>> object. Is there a better way?
> >>
> >> suds.WebFault exceptions are objects, so you can do some querying
> >> like:
> >>
> >> except WebFault, ex:
> >>    if ('LoginFault' in ex.fault.detail
> >>        and ex.fault.detail.LoginFault.exceptionCode
> >> == 'INVALID_LOGIN'):
> >>        log.critical('Invalid credentials supplied for Salesforce')
> >>
> >> Another example:
> >>
> >> except WebFault, ex:
> >>    if ('ApiFault' in ex.fault.detail
> >>        and ex.fault.detail.ApiFault.message.startswith('Login
> >> failed')):
> >>       log.critical('Invalid credentials supplied for Yahoo')
> >>
> >> What, exactly, you query for can depend on the service and the
> >> call you're performing.
> >>
> >>> When exceptions are thrown I get this error printed to
> >>> stdout/stderr:
> >>>
> >>> No handlers could be found for logger "suds.client"
> >>>
> >>> Is there a way to turn off this message without having to use the
> >>> logging module? I would think if I didn't request logging that
> >>> the module shouldn't complain that I'm not using it right?
> >>
> >> If you want to ignore messages, you can just do something like:
> >>
> >> logging.getLogger('suds.client').setLevel(logging.CRITICAL)
> >>
> >> or make another similar call which will mute most or all messages.
> >>
> >> j
> >>
> >> --
> >> Joshua Kugler
> >> Part-Time System Admin/Programmer
> >> http://www.eeinternet.com
> >> PGP Key: http://pgp.mit.edu/  ID 0x73B13B6A
> >
> > --
> > Edwin V



-- 
Joshua Kugler
Part-Time System Admin/Programmer
http://www.eeinternet.com
PGP Key: http://pgp.mit.edu/  ID 0x73B13B6A


More information about the suds mailing list