views:

34

answers:

2

Here is my code:

#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)

Here is what it outputs:

<?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/"&gt;
   <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>

See how it creates the accountID node twice and wraps the whole thing in it? WHY? How do I make it stop that?!

EDIT: I just noticed this in the SUDS output:

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

                  (InventoryItemSubmit){

What is this tag? ...going to check docs

A: 

This might be a problem with the WSDL or a bug in SUDS. Have you compared what the WSDL looks like to that of the SOAP envelope being presented by SUDS?

jathanism
<s:element name="SynchInventoryItemList">−<s:complexType>−<s:sequence><s:element minOccurs="1" maxOccurs="1" name="accountID" nillable="true" type="s:string"/><s:element minOccurs="0" maxOccurs="1" name="itemList" type="tns:ArrayOfInventoryItemSubmit"/></s:sequence></s:complexType></s:element>
KacieHouser
well that didn't turn out very pretty, but it's not the WSDL
KacieHouser
I saw someone in the WSDL providers group w/ the same problem but they failed to report how they fixed it.
KacieHouser
A: 

The answer is in the very last line of my code I need to do this:

ca_client_inventory.service.SynchInventoryItemList(accountID, array_of_inventory_item_submit)

Where accountID is a variable that holds the string account id

I was told by jortel in the #suds IRC chat room that: "suds provides an rpc interface that insulates users from soap messaging styles" And the new parameters in the call came from him too. Hope this helps someone.

KacieHouser