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 la fuente para averiguar que hacen.
Algunos de estos siguientes métodos serán reemplazados por plone.api en el futuro:
Products.CMFCore.utils.getToolByName
->api.portal.get_tool
zope.component.getMultiAdapter
->api.content.get_view
Herramientas del portal¶
Algunas partes de Plone son módulos muy complejos entre si (ej. el 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 archivo interfaces.py
en el respectivo paquete y leer la documentación incluida en formato 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 agregar tu propia información de rastreo al log es muy simple.- pdb
El depurador de Python
pdb
, es la herramienta simple mas importante para nosotros cuando programemos. ¡Solo agregaimport 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 complementoProducts.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
/pdb
a 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 Plone
usted terminara en una sesión de comando del 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 es usado por el complemento
plone.app.debugtoolbar
.- Products.PrintingMailHost
Un complemento que previene a Plone enviar mensajes. Los mensajes son registrados como eventos en el log del servicio.
- Products.Ienablesettrace
Complemento que permite usar
pdb
yipdb
en scripts python skin. Eso es muy útil.verbose-security = on
Una opción para la receta plone.recipe.zope2instance que hace a los logs de las razones detalladas sobre por que un usuario no puede ser autorizado a ver algo.
./bin/buildout annotate
Una 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 shell script de Python para ti que tiene los paquetes de su sitio Plone en su PYTHONPATH. Puede agrega la parte Buildout a la suya con la siguiente configuración:
[zopepy] recipe = zc.recipe.egg eggs = ${instance:eggs} interpreter = zopepy