Aby przeprowadzić konwersję dokumentów, potrzebujemy , , i . Można również skorzystać z . Ale to jest tylko do uruchamiania serwera uWSGI, a do łączenia z serwerem uWSGI będziemy używać .
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 .
Źródło: habr.com
