简体   繁体   中英

Python suds Exchange Web Service getting empty service attribute

I finally got my EWS client to not give me 401 errors but I don't know if that actually means anything. Now when I instantiate the suds Client object, it's got an empty service attribute.

from suds.transport.https import *
from suds.client import Client 
from os import environ
import sys

def first(car=None, *cdr):
    return car

def cleaned(lines):
    return map(str.strip, lines)

def getauth(f=open("%s/.ews/auth"%(environ.get("HOME")), "rt")):
    return first(cleaned(f.readlines()), f.close())

def serviceURI():
    return "https://%s/ews/Services.wsdl"%(environ.get("WEBMAIL"))

def auth():
    def nclnt(tx):
        return Client(serviceURI(), transport=tx)
    def ntauth(username, password):
        '''Authenticate with NTLM and return the Client object.'''
        return nclnt(WindowsHttpAuthenticated(username=username,
                                              password=password))
    def webauth(username, password):
        '''Use standard web authentication.'''
        return nclnt(HttpAuthenticated(username=username,
                                       password=password))
    def authWith(method):
        return method(*getauth())
    return authWith(ntauth if "ntlm" in sys.argv else webauth)

def main():
    def _go(client):
        print client
        print client.last_received
        print dir(client.service)
        return 0
    return _go(auth())

if __name__=="__main__":
    main()

And when I run this:

[ishpeck@slcyoshimitsu random_scripts]$ python ews.py ntlm

Suds ( https://fedorahosted.org/suds/ )  version: 0.4 GA  build: R699-20100913
<bound method Client.last_received of <suds.client.Client object at 0x17ea6d0>>
Traceback (most recent call last):
  File "ews.py", line 42, in <module>
    main()
  File "ews.py", line 39, in main
    return _go(auth())
  File "ews.py", line 37, in _go
    print dir(client.service)
  File "/usr/lib/python2.7/site-packages/suds/client.py", line 296, in __getattr__
    port = self.__find(0)
  File "/usr/lib/python2.7/site-packages/suds/client.py", line 331, in __find
    raise Exception, 'No services defined'
Exception: No services defined
[ishpeck@slcyoshimitsu random_scripts]$ python ews.py

Suds ( https://fedorahosted.org/suds/ )  version: 0.4 GA  build: R699-20100913
<bound method Client.last_received of <suds.client.Client object at 0x136c6d0>>
Traceback (most recent call last):
  File "ews.py", line 42, in <module>
    main()
  File "ews.py", line 39, in main
    return _go(auth())
  File "ews.py", line 37, in _go
    print dir(client.service)
  File "/usr/lib/python2.7/site-packages/suds/client.py", line 296, in __getattr__
    port = self.__find(0)
  File "/usr/lib/python2.7/site-packages/suds/client.py", line 331, in __find
    raise Exception, 'No services defined'
Exception: No services defined

I'm noticing a lot of people complaining about having problems with this very thing but haven't found anybody who claims to have gotten it working.

your "print client" line didn't return anything, so I suspect it had a problem with the wsdl. Turn on some debugging to see what's going on..

import logging
logging.basicConfig(level=logging.DEBUG, filename="suds.log")
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM