Przepisy uWSGI: konwersja dokumentów przy użyciu LibreOffice

Aby przeprowadzić konwersję dokumentów, potrzebujemy LibreOffice, uwsgi-python, pylokit i webob. Można również skorzystać z gotowego rozwiązania. Ale to jest tylko do uruchamiania serwera uWSGI, a do łączenia z serwerem uWSGI będziemy używać nginx.

Najprostsza aplikacja uWSGI na Pythonie składa się z funkcji application z dwoma argumentami environ i start_response

import os       # importujemy
import pylokit  # niezbędne
import tempfile # potrzebne
import webob    # moduły

office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # ładujemy bibliotekę LibreOffice z podanej ścieżki

def application(environ, start_response): # funkcja dla uWSGI
    request = webob.Request(environ) # uzyskujemy zapytanie z otoczenia
    file = request.POST['file'] # plik do konwersji przekazywany jest przez multipart\/form-data o nazwie file
    filename, extension = os.path.splitext(file.filename) # uzyskujemy nazwę i rozszerzenie
    with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\/')[-1]) as out: # tworzymy jeden tymczasowy plik z rozszerzeniem przekazanego pliku i drugi tymczasowy plik z rozszerzeniem końcowym (dla kompatybilności z unoconv-api)
        inp.write(file.file.read()) # zapisujemy zawartość przekazanego pliku w pierwszym pliku tymczasowym
        inp.flush() # (ponieważ LibreOfficeKit działa tylko z plikami)
        with office.documentLoad(inp.name) as doc: # ładujemy przekazany plik 
            doc.saveAs(out.name) # eksportujemy załadowany plik do innego pliku tymczasowego (format określany jest przez rozszerzenie)
            with open(out.name, 'rb') as out2: # otwieramy inny plik tymczasowy
                response = webob.Response(body=out2.read()) # tworzymy odpowiedź na podstawie odczytu z innego pliku tymczasowego
                return response(environ, start_response) # i zwracamy go

Można oczywiście dodać obsługę różnych błędów.

Konwersja testowego jednostronicowego pliku odt do pdf odbywa się około 1,5 razy szybciej w porównaniu z unoconv-api.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster