title: Python - Error querying Solarwinds N-Central via SOAP
body: <p>I'm using python 3 to write a script that generates a customer report for Solarwinds N-Central. The script uses SOAP to query N-Central and I'm using zeep for this project. While not new to python I am new to SOAP.</p>
  
  <p>When calling the CustomerList fuction I'm getting the <code>TypeError: __init__() got an unexpected keyword argument 'listSOs'</code></p>
  
  <pre><code>import zeep
  
  wsdl = 'http://' + &lt;server url&gt; + '/dms/services/ServerEI?wsdl'
  client = zeep.CachingClient(wsdl=wsdl)
  
  config = {'listSOs': 'true'}
  
  customers = client.service.CustomerList(Username=nc_user, Password=nc_pass, Settings=config)
  </code></pre>
  
  <p>Per the perameters below 'listSOs' is not only a valid keyword, its the only one accepted.</p>
  
  <p>CustomerList</p>
  
  <pre><code>public com.nable.nobj.ei.Customer[] CustomerList(String username, String password, com.nable.nobj.ei.T_KeyPair[] settings) throws RemoteException
  </code></pre>
  
  <p>Parameters:</p>
  
  <ul>
  <li>username - MSP N-central username</li>
  <li>password - Corresponding MSP N-central password</li>
  <li>settings - A list of non default settings stored in a T_KeyPair[]. Below is a list of the acceptable Keys and Values. If not used leave null
  
  <ul>
  <li>(Key) listSOs - (Value) "true" or "false". If true only SOs with be shown, if false only customers and sites will be shown. Default value is false.</li>
  </ul></li>
  </ul>
  
  <p>I've also tried passing the dictionary as part of a list:</p>
  
  <pre><code>config = []
  key = {'listSOs': 'true'}
  config += key
  
  TypeError: Any element received object of type 'str', expected lxml.etree._Element or builtins.dict or zeep.objects.T_KeyPair
  </code></pre>
  
  <p>Omitting the Settings value entirely:</p>
  
  <pre><code>customers = client.service.CustomerList(Username=nc_user, Password=nc_pass)
  
  zeep.exceptions.ValidationError: Missing element Settings (CustomerList.Settings)
  </code></pre>
  
  <p>And trying zeep's SkipValue:</p>
  
  <pre><code>customers = client.service.CustomerList(Username=nc_user, Password=nc_pass, Settings=zeep.xsd.SkipValue)
  
  zeep.exceptions.Fault: java.lang.NullPointerException
  </code></pre>
  
  <p>I'm probably missing something simple but I've been banging my head against the wall off and on this for awhile I'm hoping someone can point me in the right direction.</p>