30. Creando paquetes reusables con Eggs¶
Nosotros ya hemos creado un paquete Egg anteriormente.
Ahora vamos a crear una función 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 voting.
Para esto nosotros necesitamos:
Un comportamiento que almacene esa data en anotaciones.
Un viewlet para presentar los votos.
Un poco de 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.
$ mkdir src
$ cd src
$ ../bin/zopeskel
Esto devuelve una lista de plantillas disponibles que podríamos utilizar. Elegimos Dexterity ya que es bastante pequeña, pero ya cuenta con algunas de las dependencias adecuadas que necesitamos.
$ ../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.