Grok

Grok es un lenguaje de declaración alternativo para declarar sus componentes. Es compatible con la arquitectura de componentes de Zope, utilizó sólo una sintaxis alternativa.

En lugar de escribir archivos zcml separados, usted anota su código fuente y cree contenido conforme a nombres de archivo específicos para que se encuentren automáticamente. Ha habido discusiones si grok se debe utilizar en el núcleo del plone. La comunidad plone decidió en contra, porque aumenta la pila de tecnología sin agregar funcionalidad.

Algunas personas incluso están en contra de usarlo en Complementos, porque no habría una sola manera de declarar componentes, sino dos. Entonces hay una última desventaja, los componentes grok no pueden ser sobre-escritos por el paquete z3c.jbot. No me sorprendería si esto podría arreglarse.

Después de todas estas cosas negativas vamos a decirle por qué todavía nos gusta: Nos gusta escribir como pocas líneas de código y configuración como sea posible.

Por lo tanto, vamos a escribir nuestra browser view como una vista grok. Desde el lado de la arquitectura de componentes, nada cambia. Todavía tenemos que escribir un adaptador múltiple. Todos los detalles como la plantilla a utilizar o para qué browser layer se utilizará la vista se declarará con una sola anotación de línea o se deducirá de los nombres de archivo.

Grok no es parte de plone. Tenemos que añadirlo como una dependencia de nuestro paquete egg.

Open setup.py, and add five.grok to the list off addons in install_requires:

...
    zip_safe=False,
    install_requires=[
        'setuptools',
        'five.grok',
    ],

Usted necesita ejecutar buildout ahora.

Grok casi mágicamente encuentra todas sus anotaciones. Puesto que su magia no es completa, tienes que decirle a grok dónde buscar código grok. Esto requiere una sola línea de zcml, esa línea asegura que su paquete sea completamente grokked.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:five="http://namespaces.zope.org/five"
    xmlns:i18n="http://namespaces.zope.org/i18n"
    xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
    xmlns:grok="http://namespaces.zope.org/grok"
    xmlns:plone="http://namespaces.plone.org/plone"
    i18n_domain="ploneconf.site">

    <includeDependencies package="." />

    <grok:grok package="." />
    ....

Esta nueva declaración grok se encarga de encontrar todo lo relacionado con grok.

Ahora nosotros agregamos una vista grok en el nuevo archivo views.py:

1
2
3
4
5
6
7
8
from five import grok
from plone.directives import dexterity
from zope.interface import Interface


class TalkView(dexterity.DisplayForm):
    grok.require("zope2.View")
    grok.context(Interface)

Por convención, la plantilla debe estar en un sub-directorio llamado views_templates y debe llamarse talkview.pt