Turbogears 2 + i18n + formatação de datas e números

Programação, Python 1 Comment

Para setar a linguagem padrão da sua aplicação utilizando o turbogears basta editar o arquivo development.ini e incluir a seguinte linha após [app:main]:

lang = pt_BR

Depois execute os seguintes comandos:

python setup.py extract_messages
python setup.py init_catalog -l pt_BR
python setup.py compile_catalog

O primeiro comando extrai todas as mensages que devem ser traduzidas (dos templates e dos códigos python). O segundo comando cria um arquivo de tradução para a linguagem pt_BR. Após esse passo, você deve editar o arquivo gerado para traduzir as mensagens. O terceiro comando compila as mensagens traduzidas.

Agora para formatar datas e números no formato da linguagem padrão (ou da linguagem selecionada pelo usuário) basta criar o arquivo lib/i18nHelpers.py:

import tg.i18n
import babel.numbers
import babel.dates

__all__ = ["format_currency", "format_datetime"]

def get_lang(lang):
    if lang:
        return lang
    return tg.i18n.get_lang()[0]

def format_currency(number, currency = "", locale = None, *args, **kargs):
    return babel.numbers.format_currency(number, currency, locale = get_lang(locale), *args, **kargs)

def format_datetime(datetime, *args, **kargs):
    return babel.dates.format_datetime(datetime, locale = get_lang(locale), *args, **kargs)

E importar essas funções no arquivo lib/helpers.py.

No seu template basta fazer algo assim:

R$ ${h.format_currency(xyz.valor)}

Não mapei todas as funções que o Babel disponibiliza, mas basta fazer como foi feito com essas duas funções.

Turbogears 2 e Elixir

Programação, Python 1 Comment

Para se integrar o elixir no turbogears 2, basta editar o arquivo model/__init__.py do seu projeto para ficar desse jeito:

# -*- coding: utf-8 -*-

from zope.sqlalchemy import ZopeTransactionExtension
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import elixir

maker = sessionmaker(autoflush=True, autocommit=False,
                     extension=ZopeTransactionExtension())
DBSession = scoped_session(maker)
elixir.session = DBSession
elixir.options_defaults["shortnames"] = True

DeclarativeBase = declarative_base()

metadata = DeclarativeBase.metadata
elixir.metadata = metadata

def init_model(engine):
    """Call me before using any of the tables or classes in the model."""

    DBSession.configure(bind=engine)

from xyz.model.auth import User, Group, Permission
from xyz.model.entidades import Xyz

elixir.setup_all()

E para declarar suas entidades, basta fazer do jeito do Elixir, estendendo a classe elixir.Entity.

Com essa integração conseguimos utilizar o padrão Active Record.

Instalando o setuptools no Python 2.6 no Windows

Programação, Python 1 Comment

Para instalar o setuptools no Python 2.6 no Windows baixe os seguintes arquivos:

  • setuptools-0.6c9.tar.gz
  • setuptools-0.6c9-py2.6.egg

Estes arquivos estão no site: http://pypi.python.org/pypi/setuptools.

Depois extraia o arquivo setuptools-0.6c9.tar.gz e execute o seguinte comando:

python ez_setup.py setuptools-0.6c9-py2.6.egg

O comando acima irá instalar o setuptools no diretório de instalação do python. Para executar o easy_install basta que no PATH do sistema esteja o diretório Scripts que está dentro da pasta de instalação do Python.