Descubriendo Libsaas, proyecto de código abierto de Ducksboard


Desarrollo tech.lat dev

Descubriendo Libsaas, proyecto de código abierto de Ducksboard

Descubriendo Libsaas, proyecto de código abierto de Ducksboard

Oscar Campos

Últimamente estamos asistiendo al lanzamiento de muchos productos y servicios "made in Spain", ese es el caso del que hoy voy a presentar aquí en tech.lat Dev. La compañía española Ducksboard (o también conocidos de forma cariñosa como "Los Patos") ha lanzado recientemente una librería desarrollada en Python que ellos usan en su propio proyecto llamada libsaas.

La librería ha sido liberada como software de código abierto bajo la licencia MIT y está colgado, como no podía ser de otra manera, en el servicio de repositorios GitHub del que curiosamente ofrece abstracción para trabajar con él de forma sencilla.

¿Qué es libsaas?

Libsaas es un paquete para Python 2.x y Python 3.x que nos brinda una capa de abstracción sobre las APIs de diferentes SaaS y nos provee de los mecanismos necesarios para que el uso de dichas APIs por separado o de forma conjunta sea mucho más sencillo que beber de sus APIs directamente.

La librería se encarga de construir las URLs necesarias para interactuar con la API del servicio así como de serializar los parámetros de autenticación.

¿Cómo se usa?

Prácticamente como usarías cualquier ORM para bases de datos, invocamos métodos Python y la librería nos devuelve objetos Python, por ejemplo:

from libsaas.services import github
# autenticación básica para generar un tokenpretoken = github.GitHub('[email protected]', 'mi-password-super-secreto')# generamos un token registrando la aplicación "e;Libsaas en tech.latDev"e; en nuestra cuenta GitHubauth = basic.authorizations().create({'scopes': 'repo,gist', 'note': 'Libsaas en tech.latDev' })
# usamos el token para autenticarnosgh = github.GitHub(auth['token'])
# obtenemos nuestro listado de Gistsgists = gh.gists().get()# obtenemos nuestro listado de públicospublic_gists = gh.gists().public()

El código del ejemplo anterior nos devolvería dos objetos JSON que contendrían el listado de todos nuestros gist y solo de los públicos respectivamente. Como podéis apreciar, su uso es muy sencillo.

¿Qué servicios soporta libsaas?

Libsaas es una librería joven aún, su última versión estable es la v0.1 y de momento solo soporta GitHub, Zendesk y MailChimp, actualmente se está trabajando en incluir la API del servicio de repositorios gratuito BitBucket de la compañía Atlassian.

La extensión y adición de nuevos servicios es bastante sencilla puesto que la librería está diseñada para ser enormemente modular y flexible permitiendo la extensión a través de herencia simple y decorators de Python.

Combinando servicios

El punto fuerte de libsaas radica en la posibilidad de combinar servicios entre si en nuestra lógica de negocio lo cual nos permite crear mashups de forma rápida y sencilla sin preocuparnos de las peculiaridades de cada API.

En la misma documentación del proyecto podemos encontrar este ejemplo de integración entre Zendesk y MailChimp:

fromdatetimeimport datetime, timedeltafromlibsaas.servicesimport mailchimp, zendesk
# create Zendesk and Mailchimp serviceszd = zendesk.Zendesk('mycompany', 'username', 'password')mc = mailchimp.Mailchimp('8ac789caf98879caf897a678fa76daf-us2')
># get tickets solved yesterdayyesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')tickets = zd.search('updated{0} status:solved type:ticket'.format(yesterday))
# get emails of users who requested those ticketsuser_ids = [ticket['requester_id'] for ticket in tickets['results']]emails = [zd.user(user_id).get()['user']['email'] for user_id in user_ids]
# grab the ID of the "Users" listlists = mc.lists(filters={'list_name': 'Users'})list_id = lists['data'][0]['id']
# set the SOLVED variable for those users in Mailchimp to yesterdaybatch = [{'EMAIL': email, 'SOLVED': yesterday} for email in emails] mc.listBatchSubscribe(list_id, batch, double_optin=False, update_existing=True)

El ejemplo anterior obtiene los tickets resueltos el día anterior desde Zendesk para enviar un correo de información a través de MailChimp a los usuarios que lo reportaron. Las posibilidades son infinitas, sobre todo, si lo utilizamos de forma conjunta a herramientas como Fabric.

Ejecutores

Libsaas usa la librería estándar de Python urllib2 para realizar las consultas HTTP necesarias para interactuar con la API de los servicios pero puede utilizar otros módulos o bien puedes utilizar un plug-in que tú mismo programes.

Por ejemplo podemos utilizar la recientemente famosa librería Requests e incluso un ejecutor para la librería de programación asíncrona Twisted ya que "Los Patos" hacen uso exhaustivo de la misma en su producto Ducksboard.

Utilidad de línea de comandos

Libsaas viene con una utilidad de línea de comandos por si queremos o necesitamos interactuar con una API de algún servicio de forma rápida desde la línea de comandos. La herramienta puede ejecutar cualquier método que provee la librería y tiene algunas características limitadas de descubrimiento de servicios.

Utilizarlo es muy sencillo como puede verse en el siguiente ejemplo:

saas github --token_or_password=mi-super-token gist get

El ejemplo anterior es equivalente al primer ejemplo utilizado en este artículo.

Conclusión

Recomiendo el uso de esta librería si tenemos la necesidad de utilizar más de un servicio a la vez o incluso si solo queremos utilizar la API de uno de los servicios que soporta, aunque por regla general ya existen librerías individuales para cada servicio que pueden ser más o menos completas que esta librería.

El caso es que es realmente interesante que empresas españolas que se benefician de utilizar herramientas de Código Abierto o Software Libre también participen y aporten a la Comunidad estupendas herramientas como es esta librería.

Desde aquí os invito a probarlo y por supuesto forkearlo y colaborar en el proyecto.

Happy Hacking!

Más Información | Página del proyecto