Atualizações no Mundo Python
Os últimos dias foram cheios de atualizações para os pythonistas
. Devido a um problema no empacotamento, 3 dias após o lançamento do Django 1.0.1, foi lançado o 1.0.2. Para quem usa o Google AppEngine, problema semelhante aconteceu: 3 dias após o lançamento do 1.1.6, saiu o 1.1.7 para corrigir bugs de última hora.
O Pylons se aproxima da versão 0.97 final, no última dia 24 saiu o Release Candidate 4, que eles esperam ser o último. A documentação atualizada você pode ver em http://docs.pylonshq.com/ ou baixar em PDF.
O Michael Bayer (SQLAlchemy, Mako), após usar o Beaker (middleware WSGI de Cache e Sessão) em produção, corrigiu muitos bugs nos caches em arquivo e memcached. Eu enviei um patch minúsculo que fez com que ele voltasse a funcionar com o Google AppEngine e tudo isso já está disponível na versão 1.1.2. Outro projeto que agora funciona melhor com o Google AppEngine é o FormEncode. A versão 1.1 tinha introduzido um pequeno problema com o Google AppEngine, que foi corrigido no FormEncode 1.2
Ao colaborar com a tradução da documentação do Django para português, descobri um problema com o CSS, que depois acabou se revelando um problema com a dupla docutils + Sphinx. Enquanto o bug era testado, saiu uma nova versão, o Sphinx 0.5. O Sphinx se tornou muito popular na geração de documentação para projetos Python (a documentação do Pylons que eu citei agora a pouco é gerada com Sphinx).
É isso, hora de atualizar os virtualenvs da vida 
Open Events
Link: http://open-events.appspot.com/
OK, ok, está todo mundo brincando com o Google App Engine, e eu também. Dêem uma conferida! http://open-events.appspot.com/ e baixem o fonte em http://hg.assembla.com/open_events_calendar .
A idéia é manter atualizado o calendário de eventos de software livre no Brasil e adicionar na interface web informações extras.
Idéias, sugestões, críticas, são todos bem vindos!
AppEngine Gotchas

Logo após o lançamento do Google App Engine, uma das notícias que saíram sobre ele chamava-se Google App Engine : Easy to build, easy to maintain, and easy to scale . Após usá-lo por um período, eu diria que é fácil de manter e escalar, mas não tão fácil de construir, devido tanto a restrições arquiteturais quando à alguns pequenos bugs no SDK.
Sandbox e limitações
À semelhança do zope, o appengine oferece uma sandbox. Você tem um runtime do Python 2.5.2, mas algumas coisas estão limitadas: escrita em filesystem é proibida, alguns módulos não podem ser importados, e toda a comunicação com o mundo externo só pode ser feita através da urlfetch, e fazendo apenas requisiçõs HTTP e HTTPS (portas 80 e 443). Curiosamente, na primeira versão, mesmo a execução das APIS do gdata eram impossíveis dentro do appengine, mas logo depois eles liberaram uma nova versão com suporte a requisições através do urlfetch. Não é possível executar um subprocesso, nem executar tarefas agendadas. É um impacto razoavelmente pequeno, mas ainda assim presente.
Você pode enviar apenas 1000 arquivos no máximo. Parece muito, mas é um limite fácil de ser batido. E como não tem zipimport lá ainda, fica difícil de enviar os eggs compactados. Não chega a afetar os usuários do Django, que já tem uma versão do Django lá e não precisam enviar o Django em si, mas usuários que queiram testar outros frameworks, acabam tendo o espaço seriamente comprometido. Aliás, não existe uma forma prática de rodar outro framework, principalmente um que seja centrado em eggs, como o Pylons, devido à restrição de módulos. Ian Bicking criou um projeto chamado App Engine Monkey, que basicamente, permite o uso de eggs (não compactados) no AppEngine. Através dele é possível rodar Pylons, e possivelmente, outros frameworks.
É possível enviar seus próprios pacotes e bibliotecas para o appengine, com a exceção de que eles não usem módulos implementados em C, ou seja: apenas puro python.
Bugs no SDK
É interessante, alguns bugs acontecem no SDK apenas, mas não no servidor de produção. Mas você tem de aplicar alguns patches no seu SDK para se livrar dos bugs!
A importação de objetos em massa (bulkloader) usa o módulo csv do Python. Mas o módulo csv não tem suporte a UTF-8. É possível corrigir esse problema aplicando no SDK o patch descrito no bug 157. Isso resolve a importação no SDK, mas não no servidor de desenvolvimento.
Os cabeçalhos das requisições vem sempre em minúsculas. No meu caso, o gdata estava esperando por Location, mas recebeu location. Um caso simples de resolver.
Ao fazer requisições com o urlfetch, os parâmetros de querystring não são enviados. É um bug que afeta só o SDK, e também simples de resolver.
Django
O suporte a Django é builtin, mas devido a própria estrutura do Django algumas coisas não funcionarão como um Django comum. Por exemplo, o admin do Django depende dos models do Django. Como no AppEngine, estamos amarrados ao próprio banco do Google, o admin fica de fora. Logo, fica de fora uma característica utilissima do Django: a serialização de um objeto do Model em JSON.
Assim como surgiu o projeto para rodar o Pylons no AppEngine, existe um outro projeto, que permite que o Django seja mais Django no Appengine, com a possibilidade de executar a maioria dos comandos do manage.py, traz de volta a serialização de modelos pra JSON e torna possível o envio de e-mails usando a própria API do Django.
A parte boa
O logging funciona, muito bem por sinal, e a tela para visualizar os logs da sua aplicação é bem intuitiva. Resta ainda toda a discussão de se deixar os dados no google é bacana ou não. As restrições as vezes enchem, mas com um pouco de paciência, é possível chegar à uma convivência amigável com o AppEngine.
Google App Engine: skip_files patch

O limite de 1.000 arquivos no Google App Engine é bem fácil de ser batido com o Pylons. Penso que o TurboGears 2 nem seja factível, devido à quantidade de arquivos, mas posso estar enganado.
Na configuração do seu aplicativo, o app.yaml, existe uma diretiva, skip_files que ensina ao App Engine quais arquivos não devem ser enviados para o Google. Porém, configurar os arquivos que devem ser ignorados pode resultar no erro: (yaml.representer.RepresenterError: cannot represent an object).
Enquanto esse problema não é oficialmente corrigido, você pode usar o patch descrito em http://aralbalkan.com/1314.
