Descubriendo Libsaas, proyecto de código abierto de Ducksboard

Descubriendo Libsaas, proyecto de código abierto de Ducksboard
Facebook Twitter Flipboard E-mail

Ú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 Genbeta 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 token pretoken = github.GitHub('micorreo@example.org', 'mi-password-super-secreto') # generamos un token registrando la aplicación "e;Libsaas en GenbetaDev"e; en nuestra cuenta GitHub auth = basic.authorizations().create({'scopes': 'repo,gist', 'note': 'Libsaas en GenbetaDev' })
# usamos el token para autenticarnos gh = github.GitHub(auth['token'])
# obtenemos nuestro listado de Gists gists = gh.gists().get() # obtenemos nuestro listado de públicos public_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, timedelta
fromlibsaas.servicesimport mailchimp, zendesk
# create Zendesk and Mailchimp services zd = zendesk.Zendesk('mycompany', 'username', 'password') mc = mailchimp.Mailchimp('8ac789caf98879caf897a678fa76daf-us2')
# get tickets solved yesterday yesterday = (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 tickets user_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" list lists = mc.lists(filters={'list_name': 'Users'}) list_id = lists['data'][0]['id']
# set the SOLVED variable for those users in Mailchimp to yesterday batch = [{'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

Comentarios cerrados
Inicio