Pyramid: 1 - Montando entorno y proyecto con ZODB
Las series de artículos no son lo mío, creo que no he llegado a completar las que he empezado, pero hay que intentarlo. Entiendo que con esa premisa serán pocos los arriesgados lectores que lleguen al final, pero es una de las excusas que tengo para ponerme al lío con este nuevo reto, así que el que avisa...
Pyramid es un framework de desarrollo de aplicaciones web en Python. Todavía no sé muy bien la historia de cómo Pylons Project (que era como se llamaba antes) se convirtió en Pyramid; de hecho en la web todavía siguen nombrándolo por numerosos sitios como "Pylons Project".
Según la wikipedia, Pyramid es un framework minimalista inspirado en Zope, Pylons y Django. Originalmente se llamaba repoze.bfg (no sé si antes o después de llamarse Pylons) y está íntimamente integrado con WSGI, SQLAlchemy, ZODB, Chameleon, Mako y muchas otras tecnologías que iremos viendo poco a poco. Lo que nos interesa ahora es empezar por el principio.
Montando el entorno
Ahora que ya estamos algo situados (sobre todo si habéis visitado alguno de los anteriores enlaces) vamos a empezar la casa por los cimientos: el entorno de trabajo. Usaremos virtualenv, básicamente porque ya estamos acostumbrados a ello, así que hacer entorno sería tan sencillo como escoger un directorio en nuestro equipo y, teniendo pip instalado, instalar las dependencias:
$ mkdir PyPetProj
$ cd PyPetProj
$ virtualenv env
$ . env/bin/activate
(env)$ pip install pyramid
A la hora de escribir esta entrada se ha insalado la versión 1.5a2 de Pyramid y todas sus dependencias, podemos ver el entorno y los paquetes instalados en él con el comando pip freeze:
$ pip freeze
PasteDeploy==1.5.0
WebOb==1.2.3
pyramid==1.5a2
repoze.lru==0.6
translationstring==1.1
venusian==1.0a8
wsgiref==0.1.2
zope.deprecation==4.0.2
zope.interface==4.0.5
Iniciando el proyecto
Llegados a este punto ya tendríamos lo mínimo necesario para empezar nuestro proyecto Pyramid. Normalmente al trabajar con virtualenv empiezo una estructura con 2 directorios al mismo nivel: env/ que ya hemos creado para el entorno y src/ para el código fuente del proyecto en sí, así que seguiré la misma norma. Antes de crear el proyecto debemos tomar una decisión importante, la base de datos con la que vamos a trabajar.
Los que venimos de PHP o Django ya hemos tenido alguna que otra experiencia con MySQL, PostgreSQL o SQLite, así que vamos a intentar algo distinto, usaremos una base de datos orientada a objetos heredada de Zope: la ZODB. Tenemos que indicárselo a la hora de crear el proyecto:
(env)$ pcreate -s zodb src
(env)$ ls
env/ src/
Una vez creado el proyecto, tan sólo hace falta instalar las dependencias del mismo (dependencias de ZODB y demás) para empezar a programar y ser capaces de lanzarlo con éxito. Para ello lo registramos como desarrollo y fijaos todo lo que instala:
$ cd src/
$ python setup.py develop
[... install ...]
$ pip freeze
BTrees==4.0.8
Chameleon==2.13-1
Mako==0.9.0
MarkupSafe==0.18
PasteDeploy==1.5.0
Pygments==1.6
WebOb==1.2.3
ZConfig==3.0.3
ZEO==4.0.0
ZODB==4.0.0
ZODB3==3.11.0a3
mock==1.0.1
persistent==4.0.6
pyramid==1.5a2
pyramid-chameleon==0.1
pyramid-debugtoolbar==1.0.9
pyramid-mako==0.3.1
pyramid-tm==0.7
pyramid-zodbconn==0.4
repoze.lru==0.6
six==1.4.1
src==0.0
transaction==1.4.1
translationstring==1.1
venusian==1.0a8
waitress==0.8.7
wsgiref==0.1.2
zc.lockfile==1.1.0
zdaemon==4.0.0
zodburi==2.0b1
zope.deprecation==4.0.2
zope.interface==4.0.5
Ahora ya podríamos lanzarlo y empezar a trabajar en él, para lanzarlo usamos la herramienta pserve de la siguiente forma:
$ pserve development.ini --reload
Y tendríamos nuestro servidor de desarrollo ejecutándose por defecto en http://localhost:6543. El pantallazo del proyecto hasta ahora sería algo parecido a la siguiente imagen:
Lo siguiente sería entender la estructura del proyecto, adaptarlo a nuestras necesidades y adentrarnos un poco más en las peculiaridades de ZODB, que no son pocas. Pero eso, con un poco de suerte, será otro día.