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! 🙂

Openbravo + Apache con un bonito ProxyPass

Pongámonos en situación:

1.- Tenemos un openbravo accesible desde http://ip_interna_y_oculta:8080/openbravo

2.- Queremos que los usuarios accedan a través de http://mi_dominio_estupendo/openbravo

Los que hayáis usado apache en otras ocasiones estaréis tentados de utilizar el típico proxypass:

    ProxyPass /openbravo http://ip_de_la_maquina:8080/openbravo
    ProxyPassReverse /openbravo http://ip_de_la_maquina:8080/openbravo

Esto a primera vista funciona, el problema es que probando un poco resulta que sigue habiendo llamadas al tomcat que no se traducen internamente de manera correcta. La solución pasa por crear un nuevo conector para tomcat en el fichero /ruta_del_tomcat_de_openbravo/conf/server.xml añadiendo algo de la forma:

<Connector port="8081" proxyPort="80" proxyName="mi_dominio_estupendo" />

o

<Connector port="8081" proxyPort="443" scheme="https" proxyName="mi_dominio_estupendo" />

si se quiere usar https

Y hacemos que el proxypass utilice el nuevo conector del puerto 8081

    ProxyPass /openbravo http://ip_de_la_maquina:8081/openbravo
    ProxyPassReverse /openbravo http://ip_de_la_maquina:8081/openbravo

Reiniciamos el tomcat y el apache y listo! 🙂

Restringir tipos de contenido en plone!

A veces misteriosamente esta opción desaparece en el menú de añadir item en plone, en tal caso basta con asegurarse de que el usuario correspondiente tiene el permiso “Modify constrain types”.

Plone y los iframes

Para que una página creada desde plone admita iframes nos vamos en el zmi a portal_transforms->safe_html y añadimos en valig_tags la entrada iframe con valor 1.