Storm e Plone

Você está aqui: Página Inicial Blog Storm e Plone
    Compartilhe

Veja um breve exemplo de como instalar e conectar o Storm no Plone

 

O que é Storm?

Storm é um mapeador de objeto-relacional (ORM) para Python desenvolvido pela Canonical. O projeto foi iniciado em 9 de Julho de 2007 e é utilizado em grandes projetos da Canonical como o Launchpad e o Landscape.

Vantagens

  • Uma API leve e simples com uma fácil nível de aprendizagem a curto e a longo prazo.

  • Desenvolvido em cima de forma test-drive, a cada linha de código não testada é considerado um bug.

  • Feito para trabalhar com pequenas e grandes bases de dados como SQLite, Mysql e Postgres.

  • Storm é fácil de depurar, pois seu código é escrito com um princípio KISS(Keep It Simple & Stupid), sendo assim fácil de entender.

Características

  • Rápido

  • Storm deixa-o de forma eficiente acessar e atualizar grandes conjuntos de dados, permitindo-lhe formular consultas complexas que abrangem várias tabelas, utilizando Python.

  • Storm trata o composto de chaves primárias com facilidade.

  • Storm manipula as relações entre objetos mesmo antes de serem adicionados a um banco de dados.

Como implementar?

Partindo do conceito que um Plone site esteja instalado e configurado.

Instalação via buildout

Buildout é uma ferramenta open source de construções de software que auxilia a instalação de produtos, módulos e aplicações feitas em Python.

Crie um arquivo com o nome de storm.cfg e adicione o conteúdo abaixo:

[buildout]
eggs +=
    mysql-python
    storm

[instance]
zcml +=
    storm.zope-meta
    storm.zope

Salve o arquivo e execute o buildout, passando como parâmetro o arquivo storm.cfg, exemplo:

./bin/buildout -c storm.cfg

O buildout acima efetua a instalação para um ambiente Zope, após a sua execução basta apenas a efetuar a conexão em algum produto Plone.

Conectando o Storm

A conexão do storm com um produto Plone é feita no arquivo configure.zcml veja o exemplo abaixo de um produto de nome “example.product”

<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="example.product">

<five:registerPackage package="." initialize=".initialize" />

<include package=".browser" />
<include package=".product" />
<include package="storm.zope"/>
<include package="storm.zope" file="meta.zcml"/>

<store
name="NomeBaseDeDados"
uri="mysql://usuario:senha@localhost:porta/BaseDeDados" />

<genericsetup:registerProfile
    name="default"
    title="example.product"
    directory="profiles/default"
    description="Installs the example.product package"
    provides="Products.GenericSetup.interfaces.EXTENSION"
/>
<!-- -*- extra stuff goes here -*- -->
</configure>

Sendo name="NomeBaseDeDados" o nome da base de dados que deseja conectar, logo abaixo o campo uri é informado qual nome de usuário, senha, máquina e base de dados seja conectado.

Modelagem dos dados

Abaixo segue a tabela para modelagem de dados em Python em relação as bases de dados.

Propriedade

Python

PostgreSQL

MySQL

SQLite

Bool

bool

BOOL

TINYINT(1)

INT

Int

int, long

SERIAL, BIGSERIAL, SMALLINT, INT, BIGINT

TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT

INT

Float

float

FLOAT, REAL, DOUBLE PRECISION

FLOAT, REAL, DOUBLE PRECISION

REAL, FLOAT, DOUBLE

Decimal

Decimal

DECIMAL, NUMERIC, MONEY

DECIMAL, NUMERIC

TEXT, VARCHAR

Unicode

unicode

TEXT, VARCHAR, CHAR

TEXT, VARCHAR, CHAR

TEXT, VARCHAR

RawStr

str

BYTEA

BLOB, BINARY, VARBINARY

BLOB

Pickle

any

BYTEA

BLOB, BINARY, VARBINARY

BLOB

DateTime

datetime

TIMESTAMP

DATETIME, TIMESTAMP

TEXT, VARCHAR

Date

date

DATE

DATE

TEXT, VARCHAR

Time

time

TIME

TIME

TEXT, VARCHAR

TimeDelta

timedelta

INTERVAL

TEXT

TEXT, VARCHAR

List

list

ARRAY[]

?

TEXT, VARCHAR

Storm