[Python, Nginx] Рецепты uWSGI: преобразование документов с использованием LibreOffice
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Для приготовления преобразования документов нам понадобится LibreOffice, uwsgi-python, pylokit и webob. Можно также воспользоваться готовым образом. Но это только для запуска uWSGI-сервера, а для подключения к uWSGI-серверу будем использовать nginx.
Самое простое uWSGI-приложение на python состоит из функции application с двумя аргументами 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 раза быстрее по сравнению с unoconv-api.
===========
Источник:
habr.com
===========
Похожие новости:
- [Ruby, Python, Программирование] Как работают профайлеры в Ruby и Python?
- [Python] Простой P2P сервер на python
- [Open source, Софт, 3D-принтеры] Дождались: вышел LibreOffice 7.0
- [Open source, Виртуализация, Разработка под Linux, Openshift] Современные приложения на OpenShift, часть 2: связанные сборки chained builds
- [Python, Программирование, .NET, Scala] Вы просто не знаете зачем нужны языки с динамической типизацией
- Выпуск свободного офисного пакета LibreOffice 7.0
- [Python] Проверка скорости интернета библиотекой Requests в мультипроцессинге
- [Python, Программирование, Отладка] 8 продвинутых возможностей модуля logging в Python, которые вы не должны пропустить (перевод)
- [Python, Алгоритмы, Обработка изображений, Машинное обучение] Нет времени объяснять, сделай автопилот
- [Криптография, Python] Дешифровка текста методом частотного анализа
Теги для поиска: #_python, #_nginx, #_nginx, #_uwsgi, #_python, #_libreoffice, #_python, #_nginx
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:52
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Для приготовления преобразования документов нам понадобится LibreOffice, uwsgi-python, pylokit и webob. Можно также воспользоваться готовым образом. Но это только для запуска uWSGI-сервера, а для подключения к uWSGI-серверу будем использовать nginx. Самое простое uWSGI-приложение на python состоит из функции application с двумя аргументами 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 раза быстрее по сравнению с unoconv-api. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:52
Часовой пояс: UTC + 5