Na prípravu konverzie dokumentov budeme potrebovať , , a . Môžeme tiež využiť . Ale toto je len na spustenie uWSGI servera, a na pripojenie k uWSGI serveru použijeme .
Najjednoduchšia uWSGI aplikácia na python sa skladá z funkcie application s dvoma argumentami environ a start_response
import os # importujeme
import pylokit # potrebné
import tempfile # potrebujeme
import webob # moduly
office = pylokit.Office('\/usr\/lib\/libreoffice\/program') # načítame knižnicu LibreOffice podľa uvedenej cesty
def application(environ, start_response): # funkcia pre uWSGI
request = webob.Request(environ) # získame požiadavku z prostredia
file = request.POST['file'] # súbor na konverziu sa prenáša cez multipart\/form-data pod menom file
filename, extension = os.path.splitext(file.filename) # získame meno a príponu
with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('\\')[-1]) as out: # vytvárame jeden dočasný súbor s príponou priloženého súboru a druhý dočasný súbor s príponou z konca požiadavky (pre kompatibilitu s unoconv-api)
inp.write(file.file.read()) # zapisujeme obsah priloženého súboru do prvého dočasného súboru
inp.flush() # (keďže LibreOfficeKit z nejakého dôvodu funguje iba s súbormi)
with office.documentLoad(inp.name) as doc: # načítame priložený súbor
doc.saveAs(out.name) # exportujeme načítaný súbor do iného dočasného súboru (formát sa berie z prípony)
with open(out.name, 'rb') as out2: # otvoríme druhý dočasný súbor
response = webob.Response(body=out2.read()) # vytvoríme výsledok z čítania druhého dočasného súboru
return response(environ, start_response) # a vraciame ho
Samozrejme, môžeme pridať aj spracovanie rôznych chýb.
Konverzia testovacieho jednostránkového odt súboru na pdf sa vykonáva približne 1,5-krát rýchlejšie v porovnaní s .
Zdroj: habr.com
