Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如果后续SOAP请求中不需要,则过滤掉递归序列化zeep dict中的所有键_Python 3.x_Zeep - Fatal编程技术网

Python 3.x 如果后续SOAP请求中不需要,则过滤掉递归序列化zeep dict中的所有键

Python 3.x 如果后续SOAP请求中不需要,则过滤掉递归序列化zeep dict中的所有键,python-3.x,zeep,Python 3.x,Zeep,我正在构建一个基于Python的SOAP客户端 在我的数据模型设计中,我使用zeep的serialize_对象helper函数为get方法调用存储序列化响应字典。我打算为数据模型dict中的各种键允许python对象的数据模型管理,然后能够使用数据模型作为后续updateSOAP调用的参数 问题在于get响应中返回的值与WSDL的update定义不匹配。因此,我希望递归地“区分”这两个dict,并删除任何不符合add定义中要求的键 但是,我不确定如何使用对象工厂Client.get_type()

我正在构建一个基于Python的SOAP客户端

在我的数据模型设计中,我使用zeep的
serialize_对象
helper函数为
get
方法调用存储序列化响应字典。我打算为数据模型dict中的各种键允许python对象的数据模型管理,然后能够使用数据模型作为后续
update
SOAP调用的参数

问题在于
get
响应中返回的值与WSDL的
update
定义不匹配。因此,我希望递归地“区分”这两个dict,并删除任何不符合
add
定义中要求的键

但是,我不确定如何使用对象工厂
Client.get_type()
提取zeep对象的递归dict表示

根据zeep的wsdl转储,我的wsdl包含以下内容:

ns0:AddPhoneReq(电话:ns0:XPhone,序列:xsd:unsignedLong)

XPhone
是:

ns0:XPhone(名称:ns0:UniqueString128,描述:ns0:String128,产品:,类别:,协议:,协议:,callingSearchSpaceName:ns0:XFkType,devicePoolName:ns0:XFkType,commonDeviceConfigName:ns0:XFkType,commonPhoneConfigName:ns0:XFkType,networkLocation:,locationName:ns0:XFkType,mediaResourceListName:ns0:XFkType,networkHoldMohAudioSourc)eId:,userHoldMohAudioSourceId:,automatedAlternateRoutingCssName:ns0:XFkType,AarNeighboryName:ns0:XFkType,加载信息:ns0:XLoadInformation,vendorConfig:ns0:XVendorConfig,versionStamp:ns0:String128,traceFlag:ns0:boolean,mlppDomainId:ns0:String128,MLppingStatus:,抢占:,UseTrustedDelayPoint:,retryVideoCallAsAudio:ns0:boolean,securityProfileName:ns0:XFkType,sipProfileName:ns0:XFkType,CGPNTransformationCSName:ns0:XFkType,useDevicePoolCgpnTransformCss:ns0:boolean,geoLocationName:ns0:XFkType,geoLocationFilterName:ns0:XFkType,sendGeoLocation:ns0:boolean,行:{({行:ns0:XPhoneLine[]}}{行标识符:ns0:XmplanIdentifier[]})},phoneTemplateName:ns0:XFkType,speeddials:{speeddial:ns0:XSpeeddial[]},busyLampFields:{busyLampField:ns0:XBusyLampField[]},primaryPhoneName:ns0:XFkType,ringSettingIdleBlfAudibleAlert:,ringSettingBusyBlfAudibleAlert:,blfDirectedCallParks:{blfDirectedCallPark:ns0:XblDirectedCallPark[]},addOnModule:{addOnModule:},userLocale:,networkLocale:,idleTimeout:,authenticationUrl:xsd:string,directoryUrl:xsd:string,idleUrl:xsd:string,informationUrl:xsd:string,messagesUrl:xsd:string,proxyServerUrl:xsd:string,services:{service:ns0:XSubscribedService[]},softkeyTemplateName:ns0:XFkType,defaultProfileName:ns0:XFkType,enableExtensionMobility:ns0:boolean,singleButtonBarge:,JoinCrossLines:,builtInBridgeStatus:,CallInfo私有化状态:,hlogStatus:,所有者用户名:ns0:XFkType,忽略表示指示器:ns0:boolean,packetCaptureMode:,packetCaptureDuration:,subscribeCallingSearchSpaceName:ns0:XFkType,ReroutedCallingSearchSpaceName:ns0:XFkType,AllowticControlFlag:ns0:boolean,presenceGroupName:ns0:XFkType,unattendedPort:ns0:boolean,RequiredTMException:ns0:boolean,RFC2833禁用:ns0:boolean,certificateOperation:,authenticationMode:,keySize:,keyOrder:,ecKeySize:,authenticationString:ns0:String128,upgradeFinishTime:xsd:string,deviceMobilityMode:,remoteDevice:ns0:boolean,dndOption:,DNDringSet:,dndStatus:ns0:boolean,isActive:ns0:boolean,isDualMode:ns0:boolean,MobilityUserName:ns0:XFkType,phoneSuite:,phoneServiceDisplay:,受保护:ns0:boolean,mtpRequired:ns0:boolean,MTPPreferedDec:,dialRulesName:ns0:XFkType,sshUserId:ns0:String50,sshPwd:ns0:String255,digestUser:ns0:String255,outboundCallRollover:,hotlineDevice:ns0:boolean,secureInformationUrl:ns0:String255,secureDirectoryUrl:ns0:String255,secureMessageUrl:ns0:String255,secureAuthenticationUrl:ns0:String255,secureIdleUrl:ns0:String255,alwaysUsePrimeLine:,始终使用语音消息的时间表:,功能控制策略:ns0:XFkType,deviceTrustMode:,语音呼叫的早期供应商支持:ns0:boolean,要求第三方注册:ns0:boolean,BlockIncomingCalls漫游时:ns0:boolean,家庭网络ID:xsd:string,AllowPresentationSharingingBFCP:ns0:boolean,机密访问:{机密访问模式:,机密访问级别:},RequiredOffpremiseLocation:ns0:boolean,allowiXApplicableMedia:ns0:boolean,CgpIngressDN:ns0:boolean,msisdn:ns0:String128,EnableCallRoutingTorWhenNonIsActive:ns0:boolean,wifiHotspotProfile:ns0:XFkType,wirelessLanProfileGroup:ns0:XFkType,ElingGroup:ns0:XFkType,CTID:xsd:positiveInteger)

我可以这样做:

from zeep import Client
from zeep.helpers import serialize_object

client = zeep.Client(**client_kwargs)  # client_kwargs just has connection and wsdl info, not shown here...
zeep_obj = client.get_type("ns0:XPhone")
print((serialize_object(zeep_obj)))
但是,这不会返回
dict


有人能建议一种过滤dict的方法,只包括使用zeep返回指定SOAP调用所需的键/值吗?有没有更好的方法可以更有效地利用zeep库与它从wsdl生成的对象进行交互?

get\u type返回构造函数。 我有:


尊敬。

您能找到任何解决方案吗?我自己通过递归检查数据模型解决了这个问题。我可能很快会发布解决方案。亲爱的,我在这方面也遇到了类似的问题。
xtype = self.__client__.get_type('ns0:XPhone')()