Camaleão e Plone

Plone 4, velocidade e Chameleon tudo em comum.

Num post anterior escrito pelo amigo simplificador @Tamosauskas (Plone mais rápido com Chameleon

), foi mencionado a preocupação e empenho que a comunidade Plone tem tido quando o assunto é desempenho. Pois bem, neste post pretendo reforçar este aspecto, lembrando que essa é umas das preocupações da comunidade, tenho também como maior delas a segurança é claro.

Como dito no post do @Tamosauskas, a cada nova versão do Plone percebemos um ganho de desempenho, desde a versão 2.5 até a mais atual em desenvolvimento 4.1rc3 (Atual até a data que estou escrevendo este post), e claro, ganho de novas funcionalidades mudanças significativas para  criação de novos produtos e tipos e a mudança da skin padrão.

O que exatamente é o tal do Chameleon?

No site oficial a melhor definição é

"Chameleon is an open-source template engine written in Python.",

de fato, trata-se de um modelo de templates escrito em Python, ele foi escrito para gerar documentos de marcação HTML ou XML para aplicações Web.


Ele usa a linguagem do

Page Template

, só que sua implementação é bem mais rápida e independente, no qual trás um conjunto de novos recursos e podemos usar em qualquer aplicação escrita em Python (2.5 e superior, incluindo 3.x e

PyPy

), algumas de suas características são:

  • Rápido - Os templates são compilados para byte-code.

  • Extensível - É fácil de estender uma linguagem ou criar sua própria.

  • Testado - Testes automatizados que protege contra regressões.

Para o Python 2.7 e superior não existem dependências de bibliotecas, já nas versões 2.5 e 2.6 a

ordereddict

e

unittest2 

são pacotes definidos como dependências, mas para se ter uma idéia de como Chameleon é independente, seu sistema de tradução é

plugável

 e baseado em

gettext.

 

Não há um suporte embutido para o pacote

zope.i18n

. Mas se o pacote for instalado, ele será usado por padrão. O pacote

translationstring

[3] oferece algumas das mesmas classes de utilidades auxiliares, sem a interface do Zope.

Usando Chameleon no seu buildout.

Adicione as linhas em seu buildout:

eggs = ... five.pt>=2.1

zcml = ... five.pt

Estes testes foram efetuados nas versões

4.0.7

e

4.1rc3

do Plone, para um teste simples crie um Page template e coloque o seguinte conteúdo:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:tal="http://xml.zope.org/namespaces/tal" xmlns:metal="http://xml.zope.org/namespaces/metal" xmlns:i18n="http://xml.zope.org/namespaces/i18n" lang="en" metal:use-macro="context/main_template/macros/master" i18n:domain="plone"> <body> <metal:main fill-slot="main" tal:define="name string:world"> Hello ${name}! </metal:main> </body> </html>

Note que não precisei colocar

tal:content

para imprimir o texto da variável

name,

abaixo mais 2 exemplos:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:tal="http://xml.zope.org/namespaces/tal" xmlns:metal="http://xml.zope.org/namespaces/metal" xmlns:i18n="http://xml.zope.org/namespaces/i18n" lang="en" metal:use-macro="context/main_template/macros/master" i18n:domain="plone"> <body> <metal:main fill-slot="main"> <div tal:replace="python:'here==context:'+str(here==context)" /> <div tal:replace="python:'here==container:'+str(here==container)" /> <div tal:replace="string:root:${root/getPhysicalPath}" /> <div tal:replace="string:nothing:${nothing}" /> <div tal:define="cgi python:modules['cgi']" tal:replace="python: dir(cgi)" /> </metal:main> </body> </html>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:tal="http://xml.zope.org/namespaces/tal" xmlns:metal="http://xml.zope.org/namespaces/metal" xmlns:i18n="http://xml.zope.org/namespaces/i18n" lang="en" metal:use-macro="context/main_template/macros/master" i18n:domain="plone"> <body> <metal:main fill-slot="main"> <table border="1"> <tr tal:repeat="row python:['apple', 'banana', 'pineapple']"> <td tal:repeat="col python:['juice', 'muffin', 'pie']"> ${row/capitalize} ${col} </td> </tr> </table> </metal:main> </body> </html>

Para realizar outros testes e aproveitar bem o Chameleon, leia a documentação

[1]

e sugiro a leitura dos códigos dos produtos Chameleon e five.pt.

[1] http://pagetemplates.org/docs/latest