Sondas de Python “RuntimeError: se ha excedido la profundidad máxima de recursión al llamar a un objeto de Python”

Estoy intentando consumir un servicio web SOAP utilizando suds de Python, pero aparece el error “RuntimeError: se excedió la profundidad máxima de recursión al llamar a un objeto de Python”.

Según la traza, hay una recursión infinita en “suds / binding / multiref.py”, línea 69.

El servicio web al que estoy tratando de acceder es http://www.reactome.org:8080/caBIOWebApp/services/caBIOService?wsdl .

El método al que estoy tratando de acceder es loadPathwayForId.

Aquí está la parte de mi código que consume el servicio web:

from suds.client import Client client = Client('http://www.reactome.org:8080/caBIOWebApp/services/caBIOService?wsdl') pathway = client.service.loadPathwayForId(2470946) 

No estoy seguro de lo que es responsable de la recursión infinita. Traté de buscar este problema y ha habido informes de problemas con la espuma y la recursión infinita, pero las huellas son diferentes a las mías (el código recursivo es diferente), así que sospecho que mi problema tiene otros orígenes.

El rastro completo:

  File "C:\Python27\lib\suds\bindings\multiref.py", line 69, in update self.update(c) File "C:\Python27\lib\suds\bindings\multiref.py", line 69, in update self.update(c) ... File "C:\Python27\lib\suds\bindings\multiref.py", line 69, in update self.update(c) File "C:\Python27\lib\suds\bindings\multiref.py", line 69, in update self.update(c) File "C:\Python27\lib\suds\bindings\multiref.py", line 67, in update self.replace_references(node) File "C:\Python27\lib\suds\bindings\multiref.py", line 80, in replace_references href = node.getAttribute('href') File "C:\Python27\lib\suds\sax\element.py", line 404, in getAttribute prefix, name = splitPrefix(name) File "C:\Python27\lib\suds\sax\__init__.py", line 49, in splitPrefix if isinstance(name, basestring) \ RuntimeError: maximum recursion depth exceeded while calling a Python object 

Gracias de antemano por la ayuda!

Después de más pruebas, parece que (desafortunadamente) la espuma tiene problemas para interpretar los objetos de la Colección Java serializados como XML. Terminé usando SOAPpy para evitar este problema. Si alguien puede sugerir una solución, ¡sería genial! Realmente me gusta la espuma por sus otros méritos sobre SOAPpy.

Probé muchas versiones y bifurcaciones de SUDS y, finalmente, encontré una que funciona con servidores proxy, https y servicios autenticados. Encuéntrela aquí:

https://github.com/unomena/suds

Además, aquí hay un código de ejemplo que muestra un uso simple:

 from suds.client import Client # SOAP WSDL url url = 'https://example.com/ws/service?WSDL' # SOAP service username and password for authentication, if needed username = 'user_name' password = 'pass_word' # local intranet proxy definition to get to the internet, if needed proxy = dict(http='http://username:password@localproxy:8080', https='http://username:password@localproxy:8080') # unauthenticaded, no-proxy # client = Client(url) # use a proxy to connect to the service # client = Client(url, proxy=proxy) # no proxy, authenticathed service # client = Client(url, username=username, password=password) # use a proxy to connect to an authenticated service client = Client(url, proxy=proxy, username=username, password=password) print client