Recetas de uWSGI: conversión de documentos utilizando LibreOffice

Para la preparación de la conversión de documentos, necesitaremos LibreOffice, uwsgi-python, pylokit y webob. También podemos utilizar de manera lista. Pero esto es solo para iniciar el servidor uWSGI, y para conectarnos al servidor uWSGI utilizaremos nginx.

La aplicación uWSGI más simple en python consiste en una función application con dos argumentos environ y start_response

import os       # importamos
import pylokit  # módulos necesarios
import tempfile # necesitamos
import webob    # módulos

office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # cargamos la biblioteca de LibreOffice en la ruta especificada

def application(environ, start_response): # función para uWSGI
    request = webob.Request(environ) # obtenemos la solicitud del entorno
    file = request.POST['file'] # el archivo para la conversión se pasa a través de multipart\/form-data con el nombre file
    filename, extension = os.path.splitext(file.filename) # obtenemos el nombre y la extensión
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # creamos un archivo temporal con la extensión del archivo enviado y otro archivo temporal con la extensión del final de la solicitud (para compatibilidad con unoconv-api)
        inp.write(file.file.read()) # escribimos el contenido del archivo enviado en el primer archivo temporal
        inp.flush() # (ya que LibreOfficeKit, por alguna razón, solo funciona con archivos)
        with office.documentLoad(inp.name) as doc: # cargamos el archivo enviado 
            doc.saveAs(out.name) # exportamos el archivo cargado a otro archivo temporal (el formato se toma de la extensión)
            with open(out.name, 'rb') as out2: # abrimos el otro archivo temporal
                response = webob.Response(body=out2.read()) # creamos el resultado a partir de la lectura del otro archivo temporal
                return response(environ, start_response) # y lo devolvemos

Por supuesto, también se pueden agregar manejos de errores.

La conversión de un archivo odt de una sola página de prueba a pdf se realiza aproximadamente 1.5 veces más rápido en comparación con unoconv-api.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster