Deiser rocks: integrating with Jira

Last friday was awesome. Leo Murillo and Carlos Fernandez, from Deiser,  were helping me out with the integration of Atlassian Jira in LiveTeamApp (my latest application for team productivity).  We spent the whole day learning about Jira integration and ended up with a nice spike containing all the information I need to develop a new version of LiveTeamApp supporting Jira. The task manager will read your Jira tasks and save the time spent back to Jira, while working with LiveTeamApp to make your current work visible in real time to your teammates.

Carlos Fernandez, Carlos Ble, Leo Murillo

Deiser is an amazing company, recently well-known for their expertise in Atlassian products and the great plugins they are building for them. Workload is one of them. If you need support on any Atlassian product, go for Deiser, these guys are experts indeed and they demonstrated that to me as we were coding together.


What surprised my a lot was that they spent the whole day with me just for the sake of collaboration. Just to help me to improve my application, making it more useful for Jira's users. We worked in their nice office, had a great lunch and a very productive coding/hacking day. The passion for their work is energizing. I am very grateful to Deiser's CEO, Guillermo Montoya for this nice gift, and of course to Carlos and Leo for their effort and kindness. Now some details on our work:

Integrating with Jira

At the beginning we tried OAuth as the authorization mechanism to make LiveTeamApp read Jira's tasks and add time spent to them, through the REST API. But I wasn't the easiest choice so we went for basic authentication with login/password. The authentication is sent in the http headers. This is the spike's code to retrieve user tasks using Python and Flask and the Requests library:

  2. @app.route("/jira/listTasks/<jiraHost>")
  3. def listJiraTasks(jiraHost):
  4. url = 'http://' + jiraHost
  5. url += '/rest/api/2/search?jql=assignee=currentUser()'
  6. url += ' and resolution=Unresolved'
  7. req = requests.get(url,
  8. headers={'Authorization': 'Basic Y2FybG9zOmNhcmxvcw=='})
  9. return req.json()

The hash in the header (Y2FybG9zOmNhcmxvcw==), is the string "username:password" base64encoded.

And this is the code to add time spent to a task:

  2. @app.route("/jira/updateTask/<jiraHost>", methods=['POST'])
  3. def updateJiraTask(jiraHost):
  4. url = 'http://' + jiraHost + '/rest/api/2/issue/TEST-3/worklog'
  5. req =,
  6. headers={'Authorization': 'Basic Y2FybG9zOmNhcmxvcw==',
  7. 'Content-Type': 'application/json'},
  8. data=simplejson.dumps({
  9. "comment":"Adding Worklog thru other app",
  10. "started":"2013-01-12T10:30:18.932+0530",
  11. "timeSpent":"2d"
  12. }))
  13. return req.json()

At the beginning we tried to do everything from JavaScript, from LiveTeamApp's client side, but due to restrictions with cross site scripting security in the browser we translated the request to the server side.

I don't have a release date for this feature to be done but it will be soon. Get ready for LiveTeamApp, you Jira user 🙂

I hope to work with Deiser's people again in the future, we had definitely a great time 😉

  • Guillermo Montoya

    It’s funny. this time I will try to answer both in english and in spanish. For us, it was a pleasure to host not only this collaboration, but also the BDD workshop the day before.

    Thank you very much for your kind words, Carlos. We’ll try to keep promoting these events, collaborations and trainings.

    And, of course, we are looking forward to working with you again. We’ll learn a lot, one more time!!

    Lo dicho Carlos, muchas gracias por tus amables palabras. Fue un placer, tanto esa jornada como el taller de BDD del día anterior. Tus palabras nos animan a continuar promocionando y ayudando a este tipo de eventos.

    Y, como dices, estamos deseando volver a colaborar contigo. Aprenderemos, de nuevo un montón de cosas nuevas.

  • Yeray Darias Camacho

    Great work Carlos. People at Deiser are really good professionals and I’m sure you checked it by yourself. This is a nice improvement for LiveTeamApp, you are doing a great work on it.


  • carlosble

    Thank you very much Yeray!

  • carlosble

    Muchisimas gracias Guillermo! 😀