21. Programando en Plone¶
plone.api¶
La herramienta mas importante actualmente para desarrolladores Plone es el complemento plone.api , el cual cubre el 20% de las tareas que cualquier desarrollador Plone que normalmente hace en 80% de su tiempo. Si no estas seguro de como manejar alguna tarea, verifica primero si plone.api tiene una solución para ti.
El api esta divido en 5 secciones. Este es un ejemplo de cada uno:
Contenido: Crear contenido
Portal: Enviar E-Mail
Grupos: Asignar roles al grupo
Usuarios: Obtener roles de usuario
Entorno: Cambiar roles dentro de un bloque
plone.api aun no es parte del núcleo de Plone, Por lo tanto, no veras ningún uso de plone.api dentro de Plone. Pero estamos seguros que sera parte de Plone.
En el código existente a veces encontraras métodos que no significan nada para usted. Usted tiene que usar el fuente para averiguar que hacen.
Algunos de estos métodos serán reemplazados por plone.api en el futuro:
Products.CMFCore.utils.getToolByName->api.portal.get_toolzope.component.getMultiAdapter->api.content.get_view
Herramientas del portal¶
Algunas partes de Plone son módulos muy complejos entre si (ej. blanco mecanismo de versionado de Products.CMFEditions). Algunos de ellos tienen una api que usted aprenderá a usar tarde o temprano.
Aquí tienes unos ejemplos:
- portal_catalog
unrestrictedSearchResults()regresa los resultados de búsqueda sin verificar si el usuario actual tiene permiso de acceso a los objetos.uniqueValuesFor()regresa todas las entradas en un índice- portal_setup
runAllExportSteps()genera un archivo comprimido en formato Tar conteniendo los artefactos de todos los pasos de exportación.- portal_quickinstaller
isProductInstalled()verifica si un producto esta instalado.
Usualmente la mejor forma para aprender acerca de la herramienta de un api es mirando en el interfaces.py en el respectivo paquete y leer la documentación incluida en docstrings.
Depurando¶
Aquí hay algunas herramientas y técnicas que usamos frecuentemente cuando desarrollamos y depuramos. Usamos algunas de ellas en varias situaciones durante el entrenamiento.
- Rastreos y el registro
El log (y la consola cuando ejecutamos en modo foreground) recolecta todos los mensajes de log que Plone imprime. Cuando ocurre una excepción Plone lanza un rastreo. La mayoría del tiempo el rastreo es todo lo que necesitas para averiguar que esta sucediendo. También agregando tu propia información al log es muy simple
- pdb
El depurador de Python pdb, es la herramienta simple mas importante para nosotros cuando programemos. ¡Solo agrega
import pdb; pdb.set_trace()en tu código y empieza a depurar!- ipdb
Mejorar pdb con el poder de IPython, por ejemplo, la implementación del tabulador, resaltado de sintaxis, mejores rastreos y la introspección. También funciona muy bien con el producto Products.PDBDebugMode.
- Products.PDBDebugMode
Un complemento que tiene dos características esenciales para su uso.
Post-mortem debugging: le lanza en un pdb cuando ocurra una excepción. de esta forma puedes averiguar que es lo que esta mal.
pdb-view: simplemente agregando
/pdba una dirección URL, le lanza a una sesión pdb con el contexto actual comoself.context. De allí puedes hacer casi todo.- Modo Depuración
Cuando se inicia Plone usando el comando
./bin/instance debug -O Ploneusted terminara en una depurador Interactivo.- plone.app.debugtoolbar
Un complemento que permite inspeccionar todo muy cercanamente. Incluso tiene una consola interactiva y un probador para expresiones TALES.
- plone.reload
Un complemento que permite recargar el código que has cambiado sin reiniciar el sitio. Esto es también usado por plone.app.debugtoolbar.
- Products.PrintingMailHost
Un complemento que previene a Plone de enviar mensajes. Ellos son registrados como eventos en el registro o log del servicio.
- Products.Ienablesettrace
Complemento que permite usar pdb y ipdb en scripts python skin. Muy útil.
verbose-security = onUna opción para la receta plone.recipe.zope2instance que hace un log de las razones detalladas sobre por que un usuario no puede ser autorizado a ver algo.
./bin/buildout annotateUna opción que cuando se ejecute buildout realiza un log de los paquetes traídos y sus versiones.
- Sentry
Sentry es una aplicación de log de errores que puede usar usted mismo. Agrega rastreos de muchas fuentes y (aquí viene la característica esencial para su uso) incluso los valores de las variables en el Stack trace. Lo usamos en todos nuestro sitios en producción.
- zopepy
Buildout puede crear un script de shell de Python para ti que tiene los paquetes de su sitio Plone en su PYTHONPATH. Agrega la parte como esto:
[zopepy] recipe = zc.recipe.egg eggs = ${instance:eggs} interpreter = zopepy