API de Python

Cualquier función Python de Rapido recibe el context como parámetro.

El context proporciona las siguientes propiedades:

context.app

Esta propiedad da acceso al objeto de aplicación Rapido.

Propiedades

acl
Devuelve el objeto de la lista de control de acceso de la aplicación Rapido (ver abajo).
blocks
Devuelve los identificadores de bloque existentes.
indexes
Devuelve los identificadores de índice existentes.
url
Devuelve la URL de la aplicación.

Métodos

create_record(self, id=None)
Crea y devuelve un nuevo registro. Si no se proporciona id, se genera una predeterminada. Si id ya existe, se sustituye por otro (como ...-1, ...-2).
delete_record(self, id=None, record=None, ondelete=True)
Elimine el registro (que se puede pasar como objeto o como id). Si la ondelete es verdad, la función on_delete será llamada (si existe) antes de borrar el registro.
get_block(self, block_id)
Devuelve un bloque.
get_record(self, id)
Devuelve el registro correspondiente al id, o None si no existe.
log(self, message)
Registra un mensaje en el registro del servidor. Si la aplicación está en modo de depuración, registra el mismo mensaje en la consola javascript del navegador. Los mensajes pueden ser cadenas o cualquier otro objeto serializable.
records(self)
Devuelve todos los registros como una lista.
_records(self)
Devuelve todos los registros como un generador de Python.
search(self, query, sort_index=None, reverse=False)
Realiza una búsqueda y devuelve registros como una lista.
_search(self, query, sort_index=None, reverse=False)
Realiza una búsqueda y devuelve registros como un generador de Python.

context.request and context.parent_request

context.request es la actual request a Rapido, como:

Cuando un bloque está embebido en una página de Plone, context.request fue emitido por el navegador del usuario, fue emitido por Diazo.

Para obtener el request emitida por el navegador del usuario, nosotros usamos context.parent_request.

Ambos son objetos de solicitud HTTP, consulte la documentación de referencia.

Ejemplos:

  • Lectura de valores presentados:
val1 = context.request.get('field_1')  # returns None if key doesn't exist
val1 = context.request['field_2']  # fail if key doesn't exist
  • Lectura del BODY:
request.get('BODY')

context.portal

Devolver el objeto de portal Plone.

Es equivalente a:

context.api.portal.get()

La tarea más común que realizaremos a través del objeto de portal es obtener su contenido:

folder = context.portal['my-folder']

context.content

Devuelve el contenido actual de Plone.

Las tareas más comunes que realizaremos en el contenido son:

  • leer / escribir sus atributos (lectura / escritura):
the_tile = context.content.title
context.content.title = "I prefer another title"
  • obteniendo su URL:
context.content.absolute_url()

Para manipular el contenido, consulte la documentación de la API de Plone sobre el contenido.

Nota

Dependiendo de su tipo de contenido, el objeto de contenido puede tener métodos y propiedades muy diferentes.

context.record

Devuelve el registro Rapido actual si lo hay.

Consulte Registro para obtener más información.

context.api

Da acceso completo a la API de Plone.

Advertencia

No es necesario importar la API, como se muestra en todos los ejemplos de API de Plone:

from plone import api  # WRONG

porque la API ya está disponible en el context de Rapido:

catalog = context.api.portal.get().portal_catalog

Esta API permite principalmente:

  • buscar contenidos; por ejemplo:

    folders = context.api.content.find(portal_type="Folder")
    # be careful, the find() method returns Brain objects, not real objects
    # so only indexed attributes are available.
    desc = folders[0].Description # OK
    folders[0].objectIds() # WRONG!
    folder = folders[0].getObject()
    folder.objectIds() # OK!
    
  • para manipular contenidos (create / delete / move / publish / etc), ejemplo:

    new_page = context.api.content.create(
        type='Document',
        title='My Content',
        container=context.content)
    context.api.content.transition(obj=new_page, transition='publish')
    
  • para acceder o gestionar la información de usuarios y grupos y enviar correos electrónicos. Ejemplo:

    current_user = context.api.user.get_current()
    context.api.portal.send_email(
        recipient=current_user.getProperty("email"),
        sender="noreply@plone.org",
        subject="Hello",
        body="World",
    )
    

Para ejemplos más detallados , consulte la documentación de la API de Plone.

context.rapido

context.rapido es una función capaz de obtener otra aplicación Rapido en nuestro script actual.

Toma como parámetro obligatorio el id de la aplicación Rapido. Ejemplo:

purchase_app = context.rapido('purchase')
new_purchase_order = purchase_app.create_record()

También puede aceptar un parámetro content para proporcionar un específico contexto contenido a la aplicación (si no se proporciona, se tomará el contenido actual). Ejemplo:

stat_app = context.rapido('stats', content=context.portal.news)

context.modules

Advertencia

Por razones de seguridad, no se permite importar un módulo Python en un archivo Rapido Python.

Rapido proporciona algunos módulos seguros a través de context.modules:

Si necesitamos agregar módulos a context.modules, podemos hacerlo agregando en nuestro propio complemento de la siguiente forma:

import re
from rapido.core import app

app.safe_modules.re = re

En este ejemplo, permitimos acceder a context.modules.re desde nuestros archivos Python Rapido.

Registro

Propiedades

url
Devuelve la URL del registro.
id
Devuelve el identificador de registro.

Métodos

display(self, edit=False)
Representa el registro utilizando su bloque asociado (si existe).
get(self, name, default=None)
Devuelve el valor del elemento (y el valor predeterminado es el default si el elemento no existe).
items(self)
Devuelve todos los elementos almacenados.
reindex(self)
Vuelva a indexar el registro.
save(self, request=None, block=None, block_id=None, creation=False)

Actualizar el registro con los elementos proporcionados e indexarlo.

request puede ser una request actual HTTP o un diccionario.

Si se menciona un bloque, se ejecutarán fórmulas (on_save, elementos calculados, etc.).

Si no hay bloque (y request es un diccionario), solo salvamos los valores de los elementos.

set_block(self, block_id)
Asigne un bloque al registro. El bloque se utilizará entonces para representar el registro o para guardarlo.

Interfaz de diccionario de Python

Los elementos del registro se pueden acceder y manipular como elementos del diccionario:

myrecord['fruit'] = "banana"
for key in myrecord:
    context.app.log(myrecord[key])
if 'vegetable' in myrecord:
    del myrecord['fruit']

Nota

Cuando se establece un valor de elemento, el registro no se reindexa.

Lista de control de acceso

Nota

La lista de control de acceso a la aplicación puede ser obtenida mediante context.app.acl.

Métodos

current_user(self)
Devuelve el ID de usuario actual. Equivalente a:
context.api.user.get_current().getUserName()
current_user_groups(self)
Devuelve los grupos al usuario actual al que pertenece. Equivalente a:
api.user.get_current().getGroups()
has_access_right(self, access_right)
Devuelve True si el usuario actual tiene el derecho de acceso especificado (los derechos de acceso Rapido son reader, author, editor, manager)
has_role(self, role_id)
Devuelve True si el usuario actual tiene la función especificada.
roles(self)
Devuelve los roles existentes.