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.