Arquivar

Archive for the ‘projects’ Category

django-importer: Software Livre Compensa

Novembro 12, 2009 Rico 2 comentários

Há um tempo atrás, desenvolvi uma aplicação para Django que achei bacana e resolvi lançar como um projeto no Google Code.

Divulguei nos canais competentes mas não houve muito alarde. Algumas pessoas pediram mais explicações mas parou por aí, o projeto ficou encostado.

Passado um tempo, o Josir me perguntou se eu poderia criar um módulo para importação de arquivos CSV. Combinamos um preço, o projeto continuaria aberto e eu desenvolvi o novo recurso.

Fiz melhorias além do requisitado, no código, na documentação e inclui um projeto de exemplo. O resultado já foi publicado e está disponível para quem quiser ver e usar.

O melhor dessa história toda é o reconhecimento, me senti muito bem em ver que o trabalho foi útil para alguém e que existe gente disposta a investir para torná-lo melhor.

Combinei com o Josir que iria divulgar o ocorrido, pode parecer algo pequeno, mas para mim foi significante e acho que serve como um bom exemplo de colaboração. Por falta de tempo, ele ainda não pode testar, mas teve o que precisava e com isso a comunidade também ganhou.

Então deixo aqui os meus agradecimentos ao Josir e à comunidade de software livre.

Conversor Python de Extratos da Caixa Econômica para o Moneylog

Agosto 17, 2009 Rico Deixe um comentário

Não tenho mantido muito controle das minhas contas mas resolvi tentar me organizar.

O Aurélio lançou a nova versão do Moneylog e eu resolvi testar. Estou achando muito interessante.

O esquema de tags é ótimo para ver gastos específicos. Tem busca, expressões regulares, relatórios. O falecido Microsoft Money deve estar com vergonha.

Para facilitar as coisas, escrevi um conversor de extratos da Caixa Econômica e resolvi publicar, pois pode ser útil para mais alguém.

Por simplicidade, a saída vai para o console, então é só direcionar para um arquivo de saída:

python caixalog.py caixa-2009.02-txt > moneylog-2009-02.txt

Vou passar o arquivo para o Aurélio. Se for útil para você, ou se tiver alguma sugestão, deixe um comentário aqui!

Como o WordPress não permite a publicação de arquivos que não sejam de vídeo, imagem ou som, vou colocar o código aqui mesmo. Para usar é preciso colar em um arquivo “caixalog.py” e ter o python instalado.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
caixalog.py
===========

Conversor de extratos em texto da Caixa Econômica para o formato do
moneylog (http://aurelio.net/moneylog).

Autor: Enrico Batista da Luz
Blog: http://ricobl.wordpress.com/
Criado: 2009-08-15

Exemplo de formato de entrada exportado do site da Caixa:

    "Conta";"Data_Mov";"Nr_Doc";"Historico";"Valor";"Deb_Cred"
    "0000000000000000";"20090105";"000000";"CP MAESTRO";"15.00";"D"

Uso:

    python caixalog.py arq1.txt [arq2.txt, arq3.txt] > arq_saida.txt

Exemplos:

    # Saída no console
    python caixalog.py extrato-2009-fev.txt
    # Um arquivo apenas
    python caixalog.py extrato-2009-fev.txt > moneylog-2009-fev.txt
    # Vários arquivos
    python caixalog.py extrato-2009-*.txt > moneylog-2009.txt

* ATENÇÃO:

    O segundo e terceiro comandos acima irão substituir os arquivos
    de saída, é recomendável fazer um backup dos seus arquivos antes
    de rodar o script.
"""

import csv
import os
import sys

# Formato das linhas para o arquivo de saída:
# DATASINALVALORTAGS E DESCRIÇÃO
output_format = '%(Data_Mov)s\t%(Deb_Cred)s%(Valor)s\t%(Historico)s'

# Mapeamento de descrição para tags padrão
tag_map = {
    'PAG BLOQTO': 'boleto',
    'CP MAESTRO': 'debito',
    'CVPREV': 'previd,invest',
    'PAG FONE': 'cel,boleto',
    'SAQ LOTER': 'saque,lot',
    'CAIXA24H': 'saque,atm',
    'TRX CT INV': 'invest',
    'CP PREPAGO': 'cel,recarga',
    'SAQ CARTAO': 'saque,caixa',
}

def add_tags(desc):
    """
    Adiciona tags à descrição se houver um mapeamento.
    """
    tags = tag_map.get(desc, None)
    if tags:
        return '%s | %s' % (tags, desc)
    return desc

def format_date(d):
    """
    Converte a data no formato yyyymmdd para yyyy-mm-dd.
    """
    return '-'.join((d[:4], d[4:6], d[6:]))

def process_file(file_path):
    """
    Processa um extrato da Caixa e converte para o formato do Moneylog.
    """
    # Verifica se o arquivo existe
    if not os.path.isfile(file_path):
        raise SystemExit('Arquivo %s não encontrado!' % file_path)

    # Abre o arquivo para leitura e cria o leitor de CSV
    input = open(input_file, 'rb')
    reader = csv.reader(input, delimiter=';')
    # Lê a primeira linha com os nomes das colunas
    headers = reader.next()
    # Processa cada linha, criando um dicionário dos valores
    # de acordo com as nomes das colunas
    for row in reader:
        # Cria o dicionário
        data = dict(zip(headers, row))
        # Formata a data
        data['Data_Mov'] = format_date(data['Data_Mov'])
        # Ajusta o sinal (vazio para crédito ou '-' para débito)
        data['Deb_Cred'] = (data['Deb_Cred'] == 'D') and '-' or ''
        # Troca pontos por vírgulas no valor
        data['Valor'] = data['Valor'].replace('.', ',')
        # Adiciona tags ao histórico
        data['Historico'] = add_tags(data['Historico'])

        # Imprime a linha formatada
        print output_format % data

    # Fecha o arquivo de entrada
    input.close()

if __name__ == '__main__':
    # Captura os parâmetros da linha de comando.
    # O primeiro é o próprio script, os seguintes
    # são os arquivos a serem processados.
    input_files = sys.argv[1:]

    # Verifica se algum arquivo foi passado
    if len(input_files) < 1:
        raise SystemExit('Parâmetros inválidos')

    # Processa cada arquivo
    for input_file in input_files:
        process_file(input_file)

Lançamento do django-importer

Abril 21, 2009 Rico 7 comentários

Read this post in English / Leia este post em Inglês

Eu tenho criado alguns importadores para models do Django e me vi repetindo um padrão, mesmo com origens de dados bem diferentes, pude encontrar um certo nível de abstração.

O resultado foi um novo projeto chamado django-importer, com a intenção de servir como base para qualquer importação no Django.

Está distribuído sob a licença BSD e hospedado no Google Code: http://code.google.com/p/django-importer/.

Estou escrevendo um projeto de exemplo para ajudar no uso. É um projeto novo, mas bastante funcional (pelo menos para mim), e há bastante a ser melhorado.

Colaboradores, comentários e sugestões são bem-vindos, é só entrar em contato aqui pelo blog ou pela página do projeto.

django-importer released!

Abril 21, 2009 Rico Deixe um comentário

Read this post in Portuguese / Leia este post em Português

I’ve been writing some importers for Django models and caught myself repeating a pattern, even though the data sources were very different, I could find some room for abstraction.

The result was a new project called django-importer, to be used as a base for any data importer on Django.

It’s released under BSD License and hosted on Google Code: http://code.google.com/p/django-importer/.

I’m writing a sample project to help in the usage. It’s a work in progress but already very useful (at least for me) and there’s plenty room for improvement.

Contributors, comments and suggestions are welcome, just leave a message here in the blog or in the project page.