Utilizando webservices de Salesforce desde python con salesforce-python-toolkit y ficheros wsdl extra

Para utilizar el API de Salesforce desde python una de las alternativas que tenemos es usar Salesforce Python Toolkit.
Como prerequisito es necesario tener instalado suds, tenemos dos opciones:

1.- Con easy install.

  easy_install "suds==0.3.9"

2.- Desde los fuentes:

  sudo apt-get install python-setuptools
  wget https://fedorahosted.org/releases/s/u/suds/python-suds-0.3.9.tar.gz
  tar zxvf python-suds-0.3.9.tar.gz
  cd python-suds-0.3.9/
  sudo python setup.py install

Una vez hecho esto descargamos el Salesforce Python Toolkit desde aquí y lo descomprimos.

Esto no pretende ser una guía completa de utilización del API, en esta url podéis consultar un montón de ejemplos. El caso más básico de autenticación y ejecución sería algo así:

from sforce.enterprise import SforceEnterpriseClient

#Login
h = SforceEnterpriseClient('/path/para/encontrar/enterprise.wsdl')
h.login(super@l.ex', '*passwordhere*', '*securitytokenhere*')

#Query de ejemplo
print h.query('SELECT FirstName, LastName FROM User')

Lo que no queda claro en la documentación es cómo utilizar un fichero de wsdl diferente al enterprise.wsdl o al partner.wsdl pero conservando la autenticación en SalesForce.
Por ejemplo, si tenemos el fichero otro.wsdl donde se especifica la llamada test() podríamos hacer algo así:

from suds.client import Client
c1 = Client('file:///path/para/encontrar/otro.wsdl')

#Añadimos la cabecera de autenticación de Salesforce y la pasamos al nuevo Client de Suds
c1.set_options(soapheaders=(h._sessionHeader))

#Hacemos la llamada a test
print c1.service.test()

Happy coding! 🙂