Athento permite crear máscaras para modificar el comportamiento de las bandejas.
Una máscara es un módulo en lenguaje Python que recibe como parámetros los elementos a mostrar en la bandeja.
Dicho módulo se implementa de una u otra forma dependiendo de si la bandeja utiliza o no el panel nuevo.
Bandejas que utilizan el panel viejo
En el código del proyecto de Athento, puede verse una plantilla de máscara en la ruta athentose/athentose/custom/queuemasks/hello_world.py cuyo contenido es:
def run(q, items, **kwargs):
for i in items:
i['helloworld'] = 'Hello World!'
doc = i.get('doc')
return items
Básicamente, una máscara de cola es una función que recibe como primer parámetro el objeto de la bandeja y como segundo parámetro el listado de elementos de la bandeja.
Como resultado, debe devolver un listado de elementos, el cual puede haber sido modificado.
La línea:
doc = i.get('doc')
nos permite recuperar el documento de una fila de la bandeja, por lo que, a partir de él, podemos hacer cualquier operación de las que se pueden hacer con un documento.
Por ejemplo, la siguiente máscara, obtiene por cada documento el valor de un metadato y le concatena el símbolo € y añade el nuevo valor como una nueva columna llamada "total_en_euros".
def run(q, items, **kwargs):
for i in items:
doc = i.get('doc')
total_factura = doc.gmv('metadata.total_factura')
i['total_en_euros'] = total_factura + '€'
return items
Bandejas que utilizan el panel nuevo
En el código del proyecto de Athento, puede verse una plantilla de máscara en la ruta athentose/athentose/custom/filtermasks/hello_world.py cuyo contenido es:
def run(queryset, **kwargs):
return queryset
Básicamente, una máscara de filtrado es una función que recibe como primer parámetro el queryset que representa el listado de elementos de la bandeja.
Como resultado, debe devolver un queryset representando el listado de elementos, el cual puede haber sido modificado.
Cada elemento del queryset representa el documento de una fila de la bandeja, por lo que, a partir de él, podemos hacer cualquier operación de las que se pueden hacer con un documento.
Por ejemplo, la siguiente máscara, filtra los documentos en los cuales el autor sea el usuario actual:
def run(queryset, **kwargs):
from users.utils import UsersUtils
current_user = UsersUtils.get_current_user()
return queryset.filter(author=current_user)
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.