gpt4 book ai didi

python - 我如何让 SOAP 水发送可选的空元素?

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:20 24 4
gpt4 key购买 nike

我有一个 SOAP API,我正在尝试通过 suds (python) 调用一个方法:

DoSomething(ns1:DoSomethingRequest Input, )

DoSomethingRequest看起来像这样:

    (DoSomethingRequest){
Person =
(Person){
Name = "Joe"
Age = 32
}
ActionOne = None
ActionTwo = None
ActionThree = None
}

在类型定义中, Action 参数都是可选的。要调用特定操作,您可以设置 DoSomethingRequest.ActionOne = [an instance of ActionOneRequest] .这一切都很好(我可以执行 ActionOne ),除了我正在尝试调用 ActionThree , 和 ActionThreeRequest是一个空的复数元素。当我设置 DoSomethingRequest.ActionThree = ActionThreeRequest , 打印品 DoSomethingRequest给出:

    (DoSomethingRequest){
Person =
(Person){
Name = "Joe"
Age = 32
}
ActionOne = None
ActionTwo = None
ActionThree = <empty>
}

并且发送到服务器的 XML 不包括 ActionThree .如果我用 pdb 拦截代码并添加一个空元素 <ActionThree></ActionThree> , 它有效。

查看代码,对于泡沫:

class ObjectAppender(Appender):    """    An L{Object} appender.    """    def append(self, parent, content):        object = content.value        if self.optional(content) and footprint(object) == 0:            return        child = self.node(content)        parent.append(child)        for item in object:            cont = Content(tag=item[0], value=item[1])            Appender.append(self, child, cont)

def footprint(sobject):    """    Get the I{virtual footprint} of the object.    This is really a count of the attributes in the branch with a significant value.    @param sobject: A suds object.    @type sobject: L{Object}    @return: The branch footprint.    @rtype: int    """    n = 0    for a in sobject.__keylist__:        v = getattr(sobject, a)        if v is None: continue        if isinstance(v, Object):            n += footprint(v)            continue        if hasattr(v, '__len__'):            if len(v): n += 1            continue        n +=1    return n

我不经常使用 SOAP,所以我假设我要么错误地使用了 API,要么错误地使用了 SOAP 水。或者,服务 API 可能是非标准的。

您知道为什么会出现问题以及如何最好地解决它吗?

奇怪的是,相反的问题是关于 SO: Suds generates empty elements; how to remove them?不幸的是,删除空元素比找出删除了哪些元素并重新添加它们要容易得多。

谢谢!

最佳答案

在阅读规范并与专家交谈后,我没有看到任何迹象表明 SOAP 库可以删除可选的空元素。

github 上有一个 suds 的补丁版本.

关于python - 我如何让 SOAP 水发送可选的空元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com