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/">
<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'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
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.