Recettes uWSGI : conversion de documents avec LibreOffice

Pour préparer la conversion de documents, nous aurons besoin de LibreOffice, uwsgi-python, pylokit et webob. Vous pouvez également utiliser une méthode prête à l'emploi. Mais c'est uniquement pour lancer le serveur uWSGI ; pour se connecter au serveur uWSGI, nous allons utiliser nginx.

L'application uWSGI la plus simple en python consiste en une fonction application avec deux arguments : environ et start_response.

import os       # importation
import pylokit  # modules nécessaires
import tempfile # requis
import webob    # modules

office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # chargement de la bibliothèque LibreOffice à partir du chemin spécifié

def application(environ, start_response): # fonction pour uWSGI
    request = webob.Request(environ) # obtenir la requête de l'environnement
    file = request.POST['file'] # le fichier à convertir est transmis via multipart\/form-data avec le nom file
    filename, extension = os.path.splitext(file.filename) # obtenir le nom et l'extension
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # créer un fichier temporaire avec l'extension du fichier transmis et un autre fichier temporaire avec l'extension de la demande (pour la compatibilité avec unoconv-api)
        inp.write(file.file.read()) # écrire le contenu du fichier transmis dans le premier fichier temporaire
        inp.flush() # (car LibreOfficeKit ne fonctionne apparemment qu'avec des fichiers)
        with office.documentLoad(inp.name) as doc: # charger le fichier transmis
            doc.saveAs(out.name) # exporter le fichier chargé vers un autre fichier temporaire (le format est pris à partir de l'extension)
            with open(out.name, 'rb') as out2: # ouvrir l'autre fichier temporaire
                response = webob.Response(body=out2.read()) # créer le résultat à partir de la lecture de l'autre fichier temporaire
                return response(environ, start_response) # et le renvoyer

Bien sûr, on peut également ajouter le traitement de diverses erreurs.

La conversion d'un fichier odt unique de test en pdf se fait environ 1,5 fois plus vite par rapport à unoconv-api.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster