SUDS рендеринг дублирующего узла и завертывание всего - PullRequest
0 голосов
/ 20 мая 2010

Вот мой код:

#Make the SOAP connection
url = "https://api.channeladvisor.com/ChannelAdvisorAPI/v1/InventoryService.asmx?WSDL"
headers = {'Content-Type': 'text/xml; charset=utf-8'}
ca_client_inventory = Client(url, location="https://api.channeladvisor.com/ChannelAdvisorAPI/v1/InventoryService.asmx", headers=headers)
#Make the SOAP headers
login = ca_client_inventory.factory.create('APICredentials')
login.DeveloperKey = 'REMOVED'
login.Password = 'REMOVED'
#Attach the headers
ca_client_inventory.set_options(soapheaders=login)

synch_inventory_item_list = ca_client_inventory.factory.create('SynchInventoryItemList')
synch_inventory_item_list.accountID = "REMOVED"

array_of_inventory_item_submit = ca_client_inventory.factory.create('ArrayOfInventoryItemSubmit')
for product in products:
   inventory_item_submit = ca_client_inventory.factory.create('InventoryItemSubmit')
    inventory_item_list = get_item_list(product)
    inventory_item_submit = [inventory_item_list]
    array_of_inventory_item_submit.InventoryItemSubmit.append(inventory_item_submit)

synch_inventory_item_list.itemList = array_of_inventory_item_submit

#Call that service baby!
ca_client_inventory.service.SynchInventoryItemList(synch_inventory_item_list)

Вот что он выводит:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://api.channeladvisor.com/webservices/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://api.channeladvisor.com/webservices/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
      <tns:APICredentials>
         <tns:DeveloperKey>REMOVED</tns:DeveloperKey>
         <tns:Password>REMOVED</tns:Password>
      </tns:APICredentials>
   </SOAP-ENV:Header>
   <ns1:Body>
      <ns0:SynchInventoryItemList>
         <ns0:accountID>
            <ns0:accountID>REMOVED</ns0:accountID>
            <ns0:itemList>
               <ns0:InventoryItemSubmit>
                  <ns0:Sku>1872</ns0:Sku>
                  <ns0:Title>The Big Book Of Crazy Quilt Stitches</ns0:Title>
                  <ns0:Subtitle></ns0:Subtitle>
                  <ns0:Description>Embellish the seams and patches of crazy quilt projects with over 75 embroidery stitches and floral motifs. You&apos;ll use this handy reference book again and again to dress up wall hangings, pillows, sachets, clothing, and other nostalgic creations.</ns0:Description>
                  <ns0:Weight>4</ns0:Weight>
                  <ns0:FlagStyle/>
                  <ns0:IsBlocked xsi:nil="true"/>
                  <ns0:ISBN></ns0:ISBN>
                  <ns0:UPC>028906018721</ns0:UPC>
                  <ns0:EAN></ns0:EAN>
                  <ns0:QuantityInfo>
                     <ns0:UpdateType>UnShipped</ns0:UpdateType>
                     <ns0:Total>0</ns0:Total>
                  </ns0:QuantityInfo>
                  <ns0:PriceInfo>
                     <ns0:Cost>0.575</ns0:Cost>
                     <ns0:RetailPrice xsi:nil="true"/>
                     <ns0:StartingPrice xsi:nil="true"/>
                     <ns0:ReservePrice xsi:nil="true"/>
                     <ns0:TakeItPrice>6.95</ns0:TakeItPrice>
                     <ns0:SecondChanceOfferPrice xsi:nil="true"/>
                     <ns0:StorePrice>6.95</ns0:StorePrice>
                  </ns0:PriceInfo>
                  <ns0:ClassificationInfo>
                     <ns0:Name>Books</ns0:Name>
                     <ns0:AttributeList>
                        <ns0:ClassificationAttributeInfo>
                           <ns0:Name>Designer/Author</ns0:Name>
                           <ns0:Value>Patricia Eaton</ns0:Value>
                        </ns0:ClassificationAttributeInfo>
                        <ns0:ClassificationAttributeInfo>
                           <ns0:Name>Trim Size</ns0:Name>
                           <ns0:Value></ns0:Value>
                        </ns0:ClassificationAttributeInfo>
                        <ns0:ClassificationAttributeInfo>
                           <ns0:Name>Binding</ns0:Name>
                           <ns0:Value>Leaflet</ns0:Value>
                        </ns0:ClassificationAttributeInfo>
                        <ns0:ClassificationAttributeInfo>
                           <ns0:Name>Release Date</ns0:Name>
                           <ns0:Value>11/1/1999 0:00:00</ns0:Value>
                        </ns0:ClassificationAttributeInfo>
                        <ns0:ClassificationAttributeInfo>
                           <ns0:Name>Skill Level</ns0:Name>
                           <ns0:Value></ns0:Value>
                        </ns0:ClassificationAttributeInfo>
                        <ns0:ClassificationAttributeInfo>
                           <ns0:Name>Pages</ns0:Name>
                           <ns0:Value>20</ns0:Value>
                        </ns0:ClassificationAttributeInfo>
                        <ns0:ClassificationAttributeInfo>
                           <ns0:Name>Projects</ns0:Name>
                           <ns0:Value></ns0:Value>
                        </ns0:ClassificationAttributeInfo>
                     </ns0:AttributeList>
                  </ns0:ClassificationInfo>
                  <ns0:ImageList>
                     <ns0:ImageInfoSubmit>
                        <ns0:PlacementName>ITEMIMAGEURL1</ns0:PlacementName>
                        <ns0:FilenameOrUrl>1872.jpg</ns0:FilenameOrUrl>
                     </ns0:ImageInfoSubmit>
                  </ns0:ImageList>
               </ns0:InventoryItemSubmit>
            </ns0:itemList>
         </ns0:accountID>
      </ns0:SynchInventoryItemList>
   </ns1:Body>
</SOAP-ENV:Envelope>

Посмотрите, как он дважды создает узел accountID и помещает в него все это? ЗАЧЕМ? Как мне это остановить?!

РЕДАКТИРОВАТЬ: Я только что заметил это в выводе SUDS:

(Content){
   tag = "accountID"
   value = 
      (SynchInventoryItemList){
         accountID = "REMOVED"
         itemList = 
            (ArrayOfInventoryItemSubmit){
               InventoryItemSubmit[] = 

                  (InventoryItemSubmit){

Что это за тег? ... собираюсь проверить документы

Ответы [ 3 ]

0 голосов
/ 21 мая 2010

Ответ находится в самой последней строке моего кода, мне нужно сделать это:

ca_client_inventory.service.SynchInventoryItemList(accountID, array_of_inventory_item_submit)

Где accountID - это переменная, которая содержит строковый идентификатор учетной записи

jortel в IRC-чате #suds сказал мне, что "suds предоставляет интерфейс rpc, который изолирует пользователей от стилей обмена мыльными сообщениями" И новые параметры в вызове также получены от него. Надеюсь, это кому-нибудь поможет.

0 голосов
/ 21 ноября 2017

Была такая же проблема и этот ответ от Филиппа Хейнса по этой ссылке сделал это для меня. Как объяснил Филип Хейнс Проблема вызвана тем, что Атрибут method.soap.input.body.wrapped экземпляра Document установлен на True. Это связано с тем, что метод Definitions.set_wrapped в wsdl.py устанавливает значение True, когда кажется, что это не так.

Попробуйте, установив для клиента unwrap параметр False,

my_client = Client(url, unwrap=False)
0 голосов
/ 20 мая 2010

Это может быть проблема с WSDL или ошибка в SUDS. Вы сравнили, как выглядит WSDL с конвертом SOAP, представленным SUDS?

...