SOAP + Zeep + XSD расширение - PullRequest
0 голосов
/ 29 января 2019

Я взаимодействую со службой SOAP через Zeep, и пока все идет хорошо, за исключением того, что я столкнулся с проблемой, связанной с передачей значений во всем, что связано с расширением XSD.

Я пробовал несколькои я в полном уме.

campaignClient = Client("https://platform.mediamind.com/Eyeblaster.MediaMind.API/V2/CampaignService.svc?wsdl")
listPaging = {"PageIndex":0,"PageSize":5}
fact=campaignClient.type_factory("ns1")
parentType = fact.CampaignIDFilter
subtype=dict(parentType.elements)["CampaignID"] = (123456,)
combined= parentType(CampaignID=subtype)

rawData  = campaignClient.service.GetCampaigns(Paging=listPaging,CampaignsFilter=combined,  ShowCampaignExtendedInfo=False,_soapheaders=token)
print(rawData)

Контекст следующий: этот сервис предназначен для получения списка элементов, и к нему можно применить фильтр, который является универсальным типом.,Затем вы можете реализовать любой тип фильтра, соответствующий этому типу, здесь CampaignIDFilter.Мои другие попытки не увенчались успехом, и служба использовала для определения неправильного типа или чего-то подобного, но этот способ - который, я думаю, на бумаге звучит, заставляет меня «что-то пошло не так».

Я буквально реализую решение, найденное здесь: Создание XML-последовательностей с помощью zeep / python

Вот служба Doc http://platform.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

Cheers

1 Ответ

0 голосов
/ 30 января 2019

Получается, что правильным способом было немного взломать, чтобы получить правильную структуру и использование типов.Сам код:

objectType = campaignClient.get_type('ns1:CampaignIDFilter')
objectWrap = xsd.Element('CampaignServiceFilter',objectType)
objectValue = objectWrap(CampaignID=123456)

wrapperT = campaignClient.get_type('ns1:ArrayOfCampaignServiceFilter')
wrapper = xsd.Element("CampaignsFilter",wrapperT)
outercontent = wrapper(objectValue)

В результате получается следующий XML:

<soap-env:Body>
   <ns0:GetCampaignsRequest xmlns:ns0="http://api.eyeblaster.com/message">
     <ns0:CampaignsFilter>
       <ns1:CampaignServiceFilter xmlns:ns1="http://api.eyeblaster.com/V1/DataContracts" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:type="ns1:CampaignIDFilter">
         <ns1:CampaignID>123456</ns1:CampaignID>
       </ns1:CampaignServiceFilter>
     </ns0:CampaignsFilter>
     <ns0:Paging>
       <ns0:PageIndex>0</ns0:PageIndex>
       <ns0:PageSize>5</ns0:PageSize>
     </ns0:Paging>
     <ns0:ShowCampaignExtendedInfo>false</ns0:ShowCampaignExtendedInfo>
   </ns0:GetCampaignsRequest>
</soap-env:Body>

Большое спасибо пользователю, который предоставил мне тот самый котел, необходимый для того, чтобы заставить этот ужас влюбленных работать. как указать xsi: type zeep python

...