30. Creando paquetes reusables con Eggs¶
Nosotros ya hemos creado un paquete Egg
anteriormente.
Ahora vamos a crear una característica que es totalmente independiente de nuestro sitio ploneconf y puede ser reutilizado en otros paquetes.
Para hacer la distinción clara, esto no es un paquete de los nombres ploneconf
pero desde starzel
.
Vamos a agregar el comportamiento de votaciones.
Para esto nosotros necesitamos:
Un comportamiento que almacene esos datos en registros de anotaciones.
Un viewlet para presentar los votos.
Un poco de código Javascript.
Un poco de CSS.
Algunos helper views para que el código Javascript puede comunicarse con Plone.
Nos ubicamos dentro del directorio src
y ejecutamos el script llamado zopeskel
desde nuestro directorio bin
del proyecto, con los siguientes comando:
$ mkdir src
$ cd src
$ ../bin/zopeskel
Esto devuelve una lista de plantillas disponibles que podríamos utilizar. Elegimos la plantilla dexterity
ya que es bastante pequeña, pero ya cuenta con algunas de las dependencias adecuadas que necesitamos, con el siguiente comando:
$ ../bin/zopeskel dexterity
Nosotros respondemos algunas preguntas:
- Enter project name:
starzel.votable_behavior
- Expert Mode? (What question mode would you like? (easy/expert/all)?) [‘easy’]:
easy
- Version (Version number for project) [‘1.0’]:
1.0.0
- Description (One-line description of the project) [‘Example Dexterity Product’]:
Voting Behavior
- Grok-Based? (True/False: Use grok conventions to simplify coding?) [True]:
False
- Use relations? (True/False: include support for relations?) [False]:
False
Tenemos que modificar ligeramente los archivos generados.
En setup.py
, eliminamos por completo las variables setup_requires
y paster_plugins
. Estos son necesarios para las características que se usan muy poco y añade una gran cantidad de código en el directorio de fuentes que no queremos. Para la lista install_requires
, añadimos una entrada para plone.api
.
Nosotros eliminamos el archivo tests.py
. Este ofrece un sistema de pruebas descontinuado, no queremos que empieces a partir de ahí.
El archivo profiles/default/types.xml
lo eliminamos también. No vamos a definir nuevos tipos de contenidos en este paquete.