Reputation: 7126
I am trying to access the SOAP api using SUDS in python
from suds.client import Client
def initialize():
url = 'http://uuuuuuuuuuuuuuu.com/wewewe/WsNBI?wsdl'
username = 'xxxxx'
password = 'ppppppp'
client = Client(url)
print client
result = client.service.Login(nbiLogin NBILogin(username,password),)
print result
i am unable to invoke the Login method, any idea how i can do this?
these are the methods returned by the query...
Suds ( https://fedorahosted.org/suds/ ) version: 0.4 GA build: R699-20100913
Service ( WsNBIService ) tns="www.test.com"
Prefixes (1)
ns0 = "www.test.com"
Ports (1):
(WsNBIPort)
Methods (5):
GetClientAssociationInfo(nbiSession NBISession, clientAssociationReqData ClientAssociationReqData, )
GetEvent(nbiSession NBISession, eventReqData EventReqData, )
GetZDClientAssociationInfo(nbiSession NBISession, clientAssociationReqData ClientAssociationReqData, )
Login(nbiLogin NBILogin, )
Logout(nbiSession NBISession, )
Types (22):
GetClientAssociationInfo
GetClientAssociationInfoResponse
GetEvent
GetEventResponse
GetZDClientAssociationInfo
GetZDClientAssociationInfoResponse
Login
LoginResponse
Logout
LogoutResponse
authenticateResult
clientAssociationDetail
clientAssociationReqData
clientAssociationResult
eventDetail
eventReqData
eventResult
eventType
nbiLogin
nbiResult
nbiSession
requestType
UPDATE:
#!/usr/bin/env python
from suds.client import Client
def initialize():
url = 'http://xxxxxxx/xxxx/WsNBI?wsdl'
username = 'xxxxx'
password = 'pppppp'
client = Client(url)
login = client.factory.create("ns0:NBILogin")
print login
ws = login.nbiLogin(userName=username, password = password)
result = client.service.Login(ws)
print result
def main():
initialize()
if __name__ == "__main__":
main()
[root@server scripts]# ./flex_soap.py
(nbiLogin){
UserName = None
Password = None
}
Traceback (most recent call last):
File "./flex_soap.py", line 19, in ?
main()
File "./flex_soap.py", line 16, in main
flexMaster()
File "./flex_soap.py", line 12, in flexMaster
ws = login.nbiLogin(userName=username, password = password)
AttributeError: nbiLogin instance has no attribute 'nbiLogin'
UPDATE:
#!/usr/bin/env python
from suds.client import Client
def initialize():
url = 'http://xxxxx/intune/WsNBI?wsdl'
username = 'uuuuu'
password = 'pppp'
client = Client(url)
print client
login = client.factory.create("ns0:NBILogin")
print login
login.UserName = username
login.Password = password
result = client.service.Login(login)
print result
event = client.factory.create("ns0:EventReqData")
print event
def main():
initialize()
if __name__ == "__main__":
main()
[root@server scripts]# ./flex_soap.py
(nbiLogin){
UserName = None
Password = None
}
(authenticateResult){
Success = True
Session =
(nbiSession){
Id = "0eda1622-473c-4dd6-b68e-4ff3c1ee27f6"
}
}
(eventReqData){
EventType =
(eventType){
value = None
}
SerialNumbers =
(SerialNumbers){
SerialNumber[] = <empty>
}
}
any idea how i can get this method
GetEvent(nbiSession NBISession, eventReqData EventReqData, )
Upvotes: 0
Views: 1258
Reputation: 414069
Your code is not a valid Python. Login(nbiLogin NBILogin, )
means that there is a method Login
that accepts a single argument of type NBILogin
. It is not a literal syntax that you should use. Try something like this:
login = client.factory.create("ns0:NBILogin")
login.UserName = username
login.Password = password
result = client.service.Login(login)
This output:
(authenticateResult){
Success = True
Session =
(nbiSession){
Id = "0eda1622-473c-4dd6-b68e-4ff3c1ee27f6"
}
}
means that result.Success == True and result.Session.Id == "0eda1622-473c-4dd6-b68e-4ff3c1ee27f6"
.
GetEvent(nbiSession NBISession, eventReqData EventReqData, )
means that you need 2 arguments of types NBISession
and EventReqData
.
The session you could get from result
. To build EventReqData
:
(eventReqData){
EventType =
(eventType){
value = None
}
SerialNumbers =
(SerialNumbers){
SerialNumber[] = <empty>
}
}
you need to create EventType
and SerialNumbers
:
event_req_data = client.factory.create("ns0:EventReqData")
event_req_data.EventType = "put some appropriate event type here"
event_req_data.SerialNumbers = [10, 51, 1] # some serial numbers
The above assumes that serial numbers are integers otherwise create each SerialNumber
the same way as all other objects via client.factory.create()
:
sns = event_req_data.SerialNumbers = client.factory.create('ns0:SerialNumbers')
for item in [10, 51, 1]:
ns = client.factory.create('ns0:SerialNumber')
ns.value = item
sns.SerialNumber.append(ns)
I don't see SerialNumbers
, SerialNumber
types in the listing so it might fail.
If suds doesn't convert from string to EventType
by itself then you could create EventType
using client.factory.create()
explicitly:
event_type = client.factory.create("ns0:EventType")
event_type.value = "put some appropriate event type here"
event_req_data.EventType = event_type
Make the call:
event = client.service.GetEvent(login.Session, event_req_data)
Upvotes: 1