Lectura de archivos y conversión a base64
La actual migración de Python 2.7 a Python 3 para Odoo 11, fue un gran cambio en el manejo de algunos tipos de datos, por ejemplo en la lectura de un archivo que puede ser una imagen, un csv o un txt nos llega a generar errores ya que nos puede devolver una instancia IO o generarnos algunos errores, para ello me di a la tarea de indagar en el manejo interno de Odoo y el mismo me dio la solución, una pequeña linea capaz de leer cualquier archivo y convertirlo a Base64 para grabarlo en un Campo Binario de nuestra Tabla.
Primero Debemos Importar la libreria base64:
# -*- coding: utf-8 -*- import base64
Ahora debemos obtener la ruta de la Imagen o archivo que queremos grabar en nuestra tabla, por ejemplo /tmp/qr_cfdi.png
La lectura de mi archivo y conversión quedaria de la siguiente manera:
La lectura de mi archivo y conversión quedaria de la siguiente manera:
f_b64 = base64.b64encode(open('/tmp/qr_cfdi.png','rb').read())
El paso final seria grabarlo en la tabla correspondiente, en mi caso la imagen QR necesito guardarla en la tabla de Facturas (account.invoice).
El ejemplo anterior utiliza el metodo browse para poder obtener una instancia de Facturas del registro en el cual quiero grabar la imagen obtenida de otro proceso, el campo cfdi_cbb es un binario de la tabla donde quiero guardar la imagen y el resultado podria observarse como la siguiente imagen:
invoice_br = self.env['account.invoice].browse(ID_FACT) invoice_br.cfdi_cbb = f_b64 # Utilizando el Metodo Write: invoice_br.write({'cfdi_cbb':f_b64})
El ejemplo anterior utiliza el metodo browse para poder obtener una instancia de Facturas del registro en el cual quiero grabar la imagen obtenida de otro proceso, el campo cfdi_cbb es un binario de la tabla donde quiero guardar la imagen y el resultado podria observarse como la siguiente imagen:
0 comentarios:
Publicar un comentario