python-chuck-norris: powerful assertions

If your python project is in trouble, the deadline is close and you are unable to make your tests pass, wait no longer, Chuck Norris will help you out.

Just install python-chuck-norris package on pypi:

sudo pip install python-chuck-norris

Or directly from the Github project:

git clone git://github.com/ricobl/python-chuck-norris.git
cd python-chuck-norris
sudo python setup.py install

Then just use Chuck’s powerful assertions to make your tests pass, like this:

import chuck
def test_chuck_power():
    chuck.assert_true(False) # passes
    chuck.assert_true(True) # passes
    chuck.assert_true(None) # passes
    chuck.fail() # raises RoundHouseKick exception

Formatação de data na língua local no Python

Outro dia um amigo que trabalha com Java e está aprendendo Python perguntou como formatar uma data no Python usando a língua local. Fiz algumas tentativas na hora mas não consegui ajudá-lo.

Mas isso me incomodou, e na tentativa de salvar uma boa alma do Java, tentei novamente e encontrei a solução:

import locale
from datetime import datetime
locale.setlocale(locale.LC_TIME, 'pt_BR.utf8')
print datetime.now().strftime('%A %d de %B de %Y, %H:%M:%S')

É preciso que o locale escolhido esteja instalado no sistema, há um comando para encontrar os locales disponíveis:

locale -a

Links úteis:

Instalando python-lxml e coverage no Ubuntu

Uma referência para mim mesmo (e para quem possa interessar), alguns módulos do python são compilados e para isto precisam das suas extensões em C.

Alguns deles são o lxml e o coverage.

Para instalar o lxml:

sudo apt-get install cython libxml2-dev libxslt1-dev
sudo pip install lxml

Para o coverage:

# Se ainda não instalou o cython
sudo apt-get install cython
sudo pip install coverage

Desativando animações no jQuery (jQuery.fx.off)

Animações em Javascript usando o jQuery podem ser muito interessantes, mas dificultam um pouco ao escrever testes, é preciso usar setTimeouts ou outras artimanhas que normalmente não estão no foco do que se deseja garantir ao escrever um teste.

Em busca de uma solução para este problema, descobri que se pode desabilitar completamente as animações no jQuery usando a propriedade jQuery.fx.off:

jQuery.fx.off = true;

Desta forma, qualquer animação atingirá imediatamente o seu estado final, sem que seja preciso mudar a sua implementação.

Desabilitando as animações e removendo as chamadas de setTimeout em uma suite de 47 testes, reduzi o tempo de execução de 6 segundos para 800 milisegundos e, mais importante ainda, me livrei de resultados intermitentes rodando os testes.