Printing Tracebacks

Sometimes you’re in a situation where you need to debug something that is inside a piece of code like this: try: [...] except Exception as e: [...] An option would be printing e but it will show only the exception message, instead of the traceback. You can solve this by adding: import traceback try: [...] except Exception as e: [...] print(''.join(traceback.format_exception(None, e, e.__traceback__))) It will show the exception and the traceback.

Read More →

Publishing your Python package in your Gitlab Package Registry

I joined iib in January and since the beginning it was clear that I’d have a lot of fun automating a few manual process. The development team is formed by three persons: the CTO, another developer and me. The team is small but step by step we’re going towards the technical excellence we want. :) One of the things that needed automation was the release of an internal library. The process to install it was basically git pull + python setup.

Read More →

Replace Django ORM Function

Today I learned: Replace function in Django’s ORM. Sometimes we stumble across a bug or a change in the business logic that forces us to change the value of a column based on another from the same table. I thought that Django might have this solved and indeed it has through the database functions. In my case I had to update the value of a column replacing its current value and, at the same time, using the value of another column.

Read More →

Saving My Mom’s Pictures: Building a Backup WhatsApp Chatbot With Python, Flask, Dropbox and Twilio

My mom isn’t really into tech and here and there she has trouble with her phone: “it’s out of space, again!”. She, like everybody else, uses WhatsApp everyday to solve business issues, to ask when we’re coming back home, and to receive and send tons of pictures. For her, backups aren’t a trivial task, so I decided to help her on this quest. I had an idea: building a WhatsApp bot to backup her pictures to my Dropbox.

Read More →

If-else workflow with Celery Tasks

Sometimes we need to link tasks according to the outcomes, similar to an if/else flow. With Celery is possible to do it using link and link_error. To give you an idea, let’s say that we need to send an important SMS to our customer. If this succeed, we should sync this SMS to our CRM tool; if something went wrong, we should contact IT right away. We can do it by linking our send_sms task to other tasks.

Read More →