传递SUDS方法名称表单变量

时间:2015-12-03 09:11:42

标签: python suds

我是python的新手,并且在使用SUDS包调用SOAP方法时遇到了一些问题。 我有这个Tk gui应用程序,从Treeview小部件我选择方法名称并从Entry小部件传递参数值。 我可以在变量中获取方法名称,但问题是,如何将变量值作为SUDS方法名称传递?

我有这段代码:

from tkinter import *
from tkinter import ttk
import sys
from suds.client import *


class SoapClass:

    def __init__(self, master):

        self.client = Client('http://www.webservicex.net/ConvertWeight.asmx?WSDL', username='', password='', faults=False)

        Button(master, text='Call', command=self.request).pack()

    def request(self):

        methodName = 'ConvertWeight'

        #Here I would like to pass methodName variable
        response = self.client.service.ConvertWeight(80, 'Kilograms', 'Grams')

        print(response)

root = Tk()
app = SoapClass(root)


root.mainloop()

我想这样做:

methodName = 'ConvertWeight'

response = self.client.service.methodName(80, 'Kilograms', 'Grams')

当然,Web Service给了我:

引发MethodNotFound(qn)

suds.MethodNotFound:找不到方法:'ConvertWeights.ConvertWeightsSoap.methodName'

我该怎么做?这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

经过一段时间挖掘互联网后,我找到了解决方案。

起初我抬头看了看:

params = client.factory.create('ConvertWeight')

并将所需参数添加到此对象。

不幸的是没有运气,因为在我调查的时候,我的WSDL被破坏了,但ImportDoctor无法修复我的WSDL,在调用client.factory.create()时,错误说“未找到类型”这清楚地表明WSDL有些不对。

无论如何我找到了另一个解决方案:

MethodToExecute = getattr(self.client.service, methodName)

try:
    response = MethodToExecute(*array)
except WebFault as e:
    response = e

所以现在我可以调用我选择的任何方法,并添加尽可能多的参数。

希望我的解决方案能帮到某个人。