Buenas, gente.
No escribo nunca por acá, siempre ando muy callado. Pero bueno, el post reciente de Browny me inspiró a contribuir algo. No tengo fotos para el thread más largo del foro, así que salió esto, jaja.
Hace un tiempo largo tuve que integrar en una empresa SugarCRM con su sistema de gestión interna, y también desarrollar algunos scripts para automatizar algunos procesos dentro del CRM. Empecé a ver la API en SOAP de sugar para accederla a través de Python, y realmente estaba poco documentada, las interfaces cambiaban a cada rato, y además, a pesar de usar una librería como SOAPpy que te abstrae bastante los detalles, era realmente incómodo manipular las estructuras de datos y lograr programas más o menos legibles.
En aquella época me puse a escribir una capa de abstracción para facilitarme un poco el laburo, y me quedó algo medio
gigantesco y horrible. Pero más o menos funcionaba.
Lo que hice hace poco fue reescribir eso de una forma un poco más legible y más fácil de usar, y pienso ir transformándolo a medida que me de el tiempo en una librería hecha y derecha. Lo que espero es que a alguien en algún momento le sirva y la pueda usar sin demasiadas complicaciones.
La desarrollé usando la versión 6.2 de SugarCRM, y en particular creo que anda con las versiones 2, 3, y 4 de la API. Eventualmente la 'librería' debería fijarse qué versión de la API se usa y adaptarse de acuerdo a eso. Está todavía en desarrollo, tiene la funcionalidad básica, le voy a ir agregando cosas en la medida que me den los tiempos

.
Para que tengan una idea de cómo se ve un programa que interactúa con Sugar usando este módulo, dejo algo de código (Verán que plagié un poquito la sintaxis de los QuerySets de Django

):
Código:
import sugarcrm
# Un setup basico para conectarse al CRM:
WSDL_URL = 'http://127.0.0.1/sugarcrm/service/v4/soap.php?wsdl'
USERNAME = 'admin'
PASSWORD = 'password'
LDAP_PASSWD = ''
LDAP_IV = ''
instance = sugarcrm.SugarInstance(WSDL_URL, USERNAME, PASSWORD,
['Contacts', 'Cases'], LDAP_PASSWD, LDAP_IV)
# Una consulta bien generica de los contactos en el CRM
query = instance.modules['Contacts'].query()
for contact in query[:4]:
print contact['first_name'] + ' ' + contact['last_name']
# Salida:
# Darrin Adger
# Gilbert Adkins
# Maritza Bail
# Morris Balmer
# Como funcionan las relaciones, bien simple:
query = instance.modules['Cases'].query()
case = query[0]
query = instance.modules['Contacts'].query()
query = query.filter(last_name__exact = 'Adger')
contact = query[0]
case.relate(contact)
# Como se realizan cambios a un registro
contact['birthdate'] = '1978-05-10'
contact.save()
Bueno, eso es por ahora un resumen de las cosas que hace. Espero poder ir puliendo el código de a poco. Les dejo un par de links en donde están los ejemplos un poco más desarrollados (
http://blog.hash-tag.com.ar/post/875324 ... e-nuestros), y el repositorio de donde pueden bajar el código fuente (>edit<
http://luisbarrueco.github.com/sugarcrm.py/).
A lo mejor en un futuro no muy lejano alguien se cruza con este post y le resulta útil!
Saludos!