Primeira Colaboração de Código ! :)

July 21, 2006 by lucmult Leave a reply »

Semana passada surgiu uma dúvida na lista python-brasil ,
manipulação de datas com o pymssql e como eu tenho interesse na utilização de Python com o MS-SQL dei bastante atenção à dúvida, gerando minha primeira colaboração com código a um projeto Open Source.

O Problema

Em um comando INSERT desejava-se inserir uma data no banco de dados.

No Python 2.4 temos o objeto datetime para trabalhar com datas, porém o driver de acesso ao banco (pymssql) não reconhece esse tipo e isso nos obriga a converter a data para string antes de enviar ao pymssql.

Obviamente essa conversão é uma responsabilidade do driver pymssql.

Simulei o erro com esse código:

>>> import pymssql
>>> pymssql.__version__
>>> from datetime import datetime
>>> con = pymssql.connect(host='server', user='usuario', password='senha', database='base')
>>> cur = con.cursor()
>>> cur.execute('insert into PrazoLog(Data) values(%s)',>>> [datetime(2006, 7, 20, 11, 6, 14)])
>>> con.commit()

Contornando o Problema

Após eu conseguir simular o erro na minha máquina fui investigar como contornar o erro, e graças ao fato do Python ser executado a partir dos fontes eu pude ler o código do pymssql que estava instalado na minha máquina sem ter que consultar o site, repositórios ou qualquer outro local.

Novamente graças ao Python executar os fontes, pude fazer alterações nos fontes do pymssql e simplemente testar. Obviamente como não desenvolvo constantemente em Python fiz meus testes e debugs de forma bem artesanal (usando prints).

Apenas consultando o e-mail com o problema e os arquivos que já estavam na minha máquina consegui chegar em um patch que permitia contornar o problema de forma simples rápida e ao meu ver bem feita.

Tomei alguns cuidados que achei importante, como tentar não adicionar mais uma dependência ao pymssql. A versão do pymssql que eu disponho não depende do módulo datetime e como eu sabia que esse módulo foi incorporado somente na versão 2.4 não queria adicionar essa dependência.

Lembrei-me, então, do duck typing. Como eu queria apenas o método timetuple da classe datetime.datetime. Apenas verifiquei se o objeto tem o método e tendo-o eu executo-o.

Funcionou que foi uma beleza :) , testei nas 3 versões do MS-SQL que eu tenho aqui na empresa (7.0, 2000, 2005) e funcionou. Fiquei empolgado e eufórico! Mandei a minha correção para a lista e o Girão, que é quem teve o problema, falou que funcionou beleza e gostou da correção.

Colaborando com a Comunidade

Aproveitando a euforia e a “aprovação” do Girão fui a página do projeto para enviar a minha proposta de patch. O projeto está no sourceforge.net , dei uma olhada no Fórum e todas as mensagens não recebiam respostas :( e não achava nenhum link do tipo “reporte um bug”.

Mas navegando pelo site do projeto achei uma nota sobre a dependência do módulo datetime e achei bem estranha. Então fui verificar os fontes, nos fontes da minha máquina não via nada que levasse ao módulo datetime, então fui consultar o repositório CVS.

Qual não foi minha surpresa quando a versão do CVS revelou-me que a dependência era justamente para solucionar o mesmo problema que eu tinha solucionado :S . Fiquei meio triste, pois pensei, re-invetei a roda, mas fiquei contante pois ainda achava minha solução mais adequada por não adicionar a tão falada dependência.

Apelei e mandei o patch direto para os 2 e-mails de desenvolvedores que eu achei no site.

Após 4 dias o Andrzej Kukula, um dos desenvolvedores, me respondeu dizendo que o meu patch seria incorporado no projeto! :D A empolgação foi total !

Moral da História

  1. O Python facilita a leitura e a depuração dos fontes
  2. Sempre verificar a versão do CVS/SVN
  3. Colaborar com algum projeto não é tão difícil assim
      Precisa-se de:

    • um pouco de interesse
    • um pouco de experiência para saber o que esperar de um módulo/biblioteca/framework, pois para mim (e para o Girão também) a conversão de tipo era função do módulo pymssql
    • um pouco de inglês
    • o que eu menos precisei foi conhecer bem a linguagem – eu acho
  4. e por último, mas não menos importante, colaborar é empolgante e divertido, principalmente em Python ;)
Advertisement

11 Responses

  1. O que posso dizer além de parabéns? :)

    Muito legal sua contribuição e também sua vontade de compartilhar essa experiência com seus leitores.

    Grande abraço

  2. Valeu Dirceu, obrigado também pelo apoio ao blog. ;)

    A idéia do post é alem de poder expor minha empolgação mostrar que é simples contribuir.

    Até mais.

  3. Parabéns pelo blog e principalmente pela iniciativa de contribuir com um projeto, isso é muito importante.

    Muito bom seu post, também “linkei” o seu blog.

    E o tema é do proprio blogger, o nome do tema é: Tekka, tem nos modelos, a unica coisa que mudei foi colocar o espaco para links na mao.

    Grandes abracos Luciano, nos encontramos na lista.

  4. ruivaldo says:

    Parabéns, Luciano!
    Lendo seu texto deu vontade de pegar o primeiro projeto que eu visse na frente e sair corrigindo bugs :)

    Legal, cara. Sucesso!

  5. Walter Cruz says:

    Colaborar certamente é divertido.

    Eu colocaboro como me é mais fácil agora, com traduções.

    Porém, tive uma experiência contrária à sua.

    Precisei testar um webservice em python. Queria que ele rodasse no mod_python. Não funcionou. Encontrei o que julguei ser um bug, enbora não soubesse como corrigir.Relatei na lista do ZSI. Ninguém respondeu. Abri um bug no sourceforge. Ninguém respondeu.

    Fiquei frustrado. Mas isso, geralmente é a exceção.

    A comunidade geralmente é ótimo

  6. ruivaldo, legal saber que o post conseguiu transmitir a minha empolgação a ponte de empolgar o leitor. :D E obrigado pelo apoio.

    Walter, obivamente antes desta contribuição com código eu já passei por frustações também.

    E minhas contribuições normalmente são correções no nosso wiki.

    Quando acontecer de tentar ajuda/apoio no projeto principal e não conseguir, tente mandar lá para a lista ou tente falar com alguém no canal IRC.

    Obrigado também por comentar. :)

    Até mais.

  7. Parabéns, Luciano!
    Eu já dei uma olhada no código do pymssql e ele realmente tem umas coisas “estranhas”. Quer dizer, agora tem uma a menos, né? :)
    O datetime na verdade já está disponível desde o Python 2.3, mas se você conseguiu fazer o trabalho sem adicionar uma dependência, melhor ainda!

  8. Ju Pacheco says:

    Mano, parabéns!!! Não entendi bulhufas (já q não sou da área), mas fico mt orgulhosa de vc!!!! :)

    Irmã coruja é fogo, né?!

    bjs e continue mandando bala!!

  9. É isso aí muleque!!!!
    Parabéns….

    Aquele abraço,–>

  10. Walter Cruz says:

    heheh! Obrigado pelo feedback Luciano.. Não tá na hora da segunda colaboração não? =)

  11. Cendí Palhares says:

    Oi Mor!

    Não entendi nadinha do que escreveu, mas fico muito orgulhosa de ver vc correndo atrás das coisas que gosta e ainda ajudando os outros.

    BeijãoZão!!! :)

Leave a Reply