K přípravě konverze dokumentů budeme potřebovat , , a . Můžeme také využít . Ale to je pouze pro spuštění uWSGI serveru, a pro připojení k uWSGI serveru použijeme .
Nejjednodušší uWSGI aplikace v Pythonu se skládá z funkce application se dvěma argumenty environ a start_response
import os # importujeme
import pylokit # potřebné
import tempfile # pro nás
import webob # moduly
office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # nahráváme knihovnu LibreOffice podle zadaného cesty
def application(environ, start_response): # funkce pro uWSGI
request = webob.Request(environ) # získáváme požadavek z prostředí
file = request.POST['file'] # soubor pro konverzi je předáván prostřednictvím multipart\/form-data pod názvem file
filename, extension = os.path.splitext(file.filename) # získáváme název a příponu
with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\\')[-1]) as out: # vytváříme jeden dočasný soubor s příponou předaného souboru a druhý dočasný soubor s příponou z konce požadavku (pro kompatibilitu s unoconv-api)
inp.write(file.file.read()) # zapisujeme obsah předaného souboru do prvního dočasného souboru
inp.flush() # (protože LibreOfficeKit nějak podivně funguje pouze se soubory)
with office.documentLoad(inp.name) as doc: # nahráváme předaný soubor
doc.saveAs(out.name) # exportujeme nahraný soubor do jiného dočasného souboru (formát je braný z přípony)
with open(out.name, 'rb') as out2: # otevíráme další dočasný soubor
response = webob.Response(body=out2.read()) # vytváříme výsledek z přečtení dalšího dočasného souboru
return response(environ, start_response) # a vracíme ho
Samozřejmě můžeme přidat také zpracování různých chyb.
Konverze testovacího jednosvazkového odt souboru do pdf probíhá přibližně 1,5krát rychleji než .
Zdroj: habr.com
