Tradução do Pylons Cheat Sheet atualizada
Link: http://artigos.waltercruz.com/pylons_cheatsheet
Pessoal, atualizei a tradução do Pylons Cheat Sheet, que está disponível em artigos.waltercruz.com.
Aiás, o próprio artigos.waltercruz.com foi desenvolvido em Pylons, usando SQLAlchemy. Dêem uma conferida!
Alguns links sobre SQLAlchemy
Semana passada, foi publicada uma comparação em ORMs Python, incluindo SQLAlchemy, Storm e Geniusql.
O SQLAlchemy é um dos ORM's mais famosos para Python. Ele implementa o padrão Data Mapper, e é possível ter objetos mapeados não para apenas uma tabela, mas para dados com junções e consultas. O padrão Active Record (mais simples que o Data Mapper, pois mapeia apenas um objeto para uma tabela), popularizado pelo Ruby on Rails, pode ser usado com o SQLAlchemy através do Elixir. Eu usei o Elixir no artigos.waltercruz.com.
Alguns links:
- Uma apresentação de Jonathan LaCour sobre o Elixir
- Apresentação de Jonathan Ellis sobre o SQLAlchemy na OSCON
- O blog de Mike Bayer, criador do SQLAlchemy. Ultimamente ele tem tratado das questões da performance do SQLAlchemy, é um conteúdo bem interessante
A versão 0.4 do SQLAlchemy será lançada em breve, e trará algumas mudanças. O tutorial disponível no site do Pylons já conta com uma atualização para a nova versão.
TurboGears no fim de semana
Há duas semanas, eu publiquei um texto chamado 'Django no fim de semana', relatando uma pequena experiência que fiz com o Django.
Na sexta-feira, o Torcato publicou um artigo chamado SQLALchemy no TurboGears. Resolvi tirar o sábado para testar o tutorial.
Usei o PostgreSQL no lugar do MySQL, o que me causou um pouco de dor de cabeça, não por causa do PostgreSQL em si, mas por causa do conector psycopg. Estou usando o Ubuntu Feisty Fawn, que vem com Python 2.5. Eu tinha instalada duas cersões do conector: psycopg e psycopg2. Ao iniciar o servidor do TurboGears com ambas as versões instaladas, ele morria no meio do caminho com core dump. Resolvi remove o psycopg2, e passou a iniciar. Mas não sem problemas: os SQL estavam sendo gerados de forma incorreta (mais especificamente, sem aspas nos campos string). Resolvi fazer o teste com o Python 2.4, reinstalei o psycopg2 e pra minha surpresa funcionou perfeitamente. Pelo visto, coisa está meio bichada na combinação python2.5 e psycopg2. Uma pena.
Se alguém resolver testar, eis o script de criação da tabela, versão PostgreSQL:
id serial,
name varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY(id)
)
CREATE TABLE recipes ( id serial,
category_id int NOT NULL,
title varchar(100) NOT NULL DEFAULT '',
description varchar(255) NULL,
date date NULL,
instructions text NULL,
constraint fk_recipes_categories FOREIGN KEY (category_id) REFERENCES categories(id),
PRIMARY KEY(id)
);
Alguns pontos:
- O TurboGears provê uma ferramenta chamada toolbox, que inclui algumas coisas legais como um interpretador de python para a web (usando ajax), o Model Designer para criar os models e o CatWalk, para o CRUD dos modelos e o WidgetBrowser(mais sobre ele à seguir), entre outros. O Django inclui o admin no seu pacote contrib, porém o admin é voltado ao usuário, enquanto o CatWalk é voltado ao desenvolvedor. Porém, o CatWalk e o ModelDesigner ainda não funcionam com o SQLAlchemy. Um pequeno preço a pagar por sair do padrão

- Gostei do sistema de templates Kid. Os zopistas vão se sentir familiares com ele, e suas construções py:content e py:replace. Você pode querer dar uma olhada no que eles tem em comum.
- Como o tutorial do Torcato foi bem sucinto, resolvi brincar um pouco alêm dele. Baixei o tgcrud no http://www.turbogears.org/cogbin/ . Porém, me senti como se tivesse sido iludido por uma propaganda enganosa: ele não faz a introspecção para saber as colunas do seu objeto. Ele gera o esqueleto do CRUD, porém ele não sai funcionando antes de você dar uma modificada. Na verdade, a propaganda não foi enganosa: ela diz que é dessa forma que funciona. Apenas minha expectativas que eram muitas.
- Achei o código dos controladores parecidos com os do rails. (Eu não cheguei a mexer muito com as views[controllers] do Django, então não posso dizer exatamente como foi essa parte).
- Uma das idéias que eu achei interessante no desenvolvimento Plone+Archetypes são os widgets. Com widgets, você não precisa escrever o HTML para o seu formulário. Você pega o seu modelo, declara que o campo nome é do tipo TextWidget ou algo assim e o template já renderiza. Pode não ser a forma mais flexível de todas, mas é prático.
- No geral, encontrei pouca documentação do TurboGears, e menos ainda sobre a combinação SQL+Alchemy e TurboGears. Para vocês terem idéia, a página que vem em primeiro lugar na busca do google é a própria página do Torcato. Tente você mesmo!
- Eu não conseguiria fazer o deploy da aplicação com o TurboGears no meu site, devido à versão do meu apache e mod_python. Poderia tentar usando FastCGI e ver se eu não fico frustrado como esse cara.
Resumindo: foi um pouco mais difícil mexer com o TurboGears que com o Django, mas note-se que eu fui muito mais 'raso' no Django - não cheguei a escrever praticamente nenhum template, e os aplicativos em si eram diferentes. Achei pouca documentação do TurboGears. Dei uma olhada por alto no SQLAlchemy e fui com a cara do mesmo - dá pra usar DataMapper ou ActiveRecord com ele. Eu diria que no geral o TurboGears ficou com um pontinho a menos que o Django.
