แแแแฃแแแแขแแก แแแแแแ แขแแชแแแก แแแกแแแแแแแแแแ แแแญแแ แแแแ
แฃแแแ แขแแแแกแ uWSGI แแแแแแแชแแ แแแแแแจแ แจแแแแแแ แคแฃแแฅแชแแฃแ แ แแแแแแแชแแแกแแแ แแ แ แแ แแฃแแแแขแแ environ แแ start_response.
import os # ะธะผะฟะพััะธััะตะผ
import pylokit # ะฝะตะพะฑั
ะพะดะธะผัะต
import tempfile # ะฝะฐะผ
import webob # ะผะพะดัะปะธ
office = pylokit.Office('/usr/lib/libreoffice/program') # ะทะฐะณััะถะฐะตะผ ะฑะธะฑะปะธะพัะตะบั LibreOffice ะฟะพ ัะบะฐะทะฐะฝะฝะพะผั ะฟััะธ
def application(environ, start_response): # ััะฝะบัะธั ะดะปั uWSGI
request = webob.Request(environ) # ะฟะพะปััะฐะตะผ ะทะฐะฟัะพั ะธะท ะพะบััะถะตะฝะธั
file = request.POST['file'] # ัะฐะนะป ะดะปั ะฟัะตะพะฑัะฐะทะพะฒะฐะฝะธั ะฟะตัะตะดะฐัััั ัะตัะตะท multipart/form-data ั ะธะผะตะฝะตะผ file
filename, extension = os.path.splitext(file.filename) # ะฟะพะปััะฐะตะผ ะธะผั ะธ ัะฐััะธัะตะฝะธะต
with tempfile.NamedTemporaryFile(suffix=extension) as inp, tempfile.NamedTemporaryFile(suffix='.%s' % request.path.split('/')[-1]) as out: # ัะพะทะดะฐัะผ ะพะดะธะฝ ะฒัะตะผะตะฝะฝัะน ัะฐะนะป ั ัะฐััะธัะตะฝะธะตะผ ะฟะตัะตะดะฐะฝะฝะพะณะพ ัะฐะนะปะฐ ะธ ะดััะณะพะน ะฒัะตะผะตะฝะฝัะน ัะฐะนะป ั ัะฐััะธัะตะฝะธะตะผ ะธะท ะพะบะพะฝัะฐะฝะธั ะทะฐะฟัะพัะฐ (ะดะปั ัะพะฒะผะตััะธะผะพััะธ ั unoconv-api)
inp.write(file.file.read()) # ะทะฐะฟะธััะฒะฐะตะผ ัะพะดะตัะถะธะผะพะต ะฟะตัะตะดะฐะฝะฝะพะณะพ ัะฐะนะปะฐ ะฒ ะฟะตัะฒัะน ะฒัะตะผะตะฝะฝัะน ัะฐะนะป
inp.flush() # (ั.ะบ. LibreOfficeKit ะฟะพัะตะผั-ัะพ ัะฐะฑะพัะฐะตั ัะพะปัะบะพ ั ัะฐะนะปะฐะผะธ)
with office.documentLoad(inp.name) as doc: # ะทะฐะณััะถะฐะตะผ ะฟะตัะตะดะฐะฝะฝัะน ัะฐะนะป
doc.saveAs(out.name) # ัะบัะฟะพััะธััะตะผ ะทะฐะณััะถะตะฝะฝัะน ัะฐะนะป ะฒ ะดััะณะพะน ะฒัะตะผะตะฝะฝัะน ัะฐะนะป (ัะพัะผะฐั ะฑะตััััั ะธะท ัะฐััะธัะตะฝะธั)
with open(out.name, 'rb') as out2: # ะพัะบััะฒะฐะตะผ ะดััะณะพะน ะฒัะตะผะตะฝะฝัะน ัะฐะนะป
response = webob.Response(body=out2.read()) # ัะพะทะดะฐัะผ ัะตะทัะปััะฐั ะธะท ััะตะฝะธั ะดััะณะพะณะพ ะฒัะตะผะตะฝะฝะพะณะพ ัะฐะนะปะฐ
return response(environ, start_response) # ะธ ะฒะพะทะฒัะฐัะฐะตะผ ะตะณะพ
แแฅแแแ, แ แ แแฅแแ แฃแแแ, แจแแแแซแแแแ แแแแแแขแแ แจแแชแแแแแแแก แแแแฃแจแแแแแ.
แกแแขแแกแขแ แแ แแแแแ แแแแแ odt แคแแแแแก pdf-แแ แแแแแงแแแแ แแแแฎแแแแแแ 1,5-แฏแแ แฃแคแ แ แกแฌแ แแคแแ, แแแแ แ
แฌแงแแ แ: www.habr.com