Кукловолок не работает с видовым сбоем ДжангоPython

Программы на Python
Ответить
Anonymous
 Кукловолок не работает с видовым сбоем Джанго

Сообщение Anonymous »

Я пытаюсь написать конечную точку Django Rest, которая будет преобразовать контент HTML в PDF, а затем вернуть ответ потокового файла, чтобы загрузить отчет. Для этой цели я использую кукловода, который отлично работает из Django Scope (например, для цели тестирования). Скачать просмотр минимальный пример следующего < /p>

Код: Выделить всё

import asyncio
from pyppeteer import launch
from django.http import HttpResponse
from rest_framework.viewsets import ViewSet
from rest_framework.permissions import  IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication

class DownloadReport (ViewSet):
permission_classes = [IsAuthenticated]
authentication_classes = [JWTAuthentication]

async def html_to_pdf(self, html):
browser = await launch(
headless=True,
args=['--no-sandbox', '--disable-setuid-sandbox']
)

page = await browser.newPage()

await page.setContent(html)

await page.setViewport({
'width': 1920,
'height': 1080,
'deviceScaleFactor': 1
})

pdf = await page.pdf({
'format': 'A3',
'printBackground': True,
'landscape': True,
'scale': 1
})

await browser.close()
return pdf

def retrieve(self, request):
content = "Hurrah PDF conversion successfull"
content = asyncio.run(self.html_to_pdf(content))
response = HttpResponse(content, content_type='application/pdf')
response['Content-Disposition'] = f'attachment;  filename="report.pdf"'

return response
< /code>
Проблема в Django, браузер запущен Neven, он бросает после Exeption < /p>
Traceback (most recent call last):
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\django\views\decorators\csrf.py", line 65, in _view_wrapper
return view_func(request, *args, **kwargs)
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\rest_framework\viewsets.py", line 124, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "C:\data\Office\Projects\Dockerized_DjangoApp\analytics\views.py", line 172, in retrieve
content = asyncio.run(self.html_to_pdf(content))
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 649, in run_until_complete
return future.result()
File "C:\data\Office\Projects\Dockerized_DjangoApp\analytics\views.py", line 29, in html_to_pdf
browser = await launch(
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\pyppeteer\launcher.py", line 307, in launch
return await Launcher(options, **kwargs).launch()
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\site-packages\pyppeteer\launcher.py", line 159, in launch
signal.signal(signal.SIGINT, _close_process)
File "C:\Users\Zain ul abdin\AppData\Local\Programs\Python\Python310\lib\signal.py", line 56, in signal
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
ValueError: signal only works in main thread of the main interpreter
как я могу решить эту проблему, чтобы фактически получить ответ в формате PDF без этой проблемы, связанной с сигналом? Пожалуйста, не рекомендуйте wkhtmltopdf или любые другие инструменты, поскольку они неправильно отображают синтаксис на основе Modern JS. Мой HTML содержит интеграцию JS с попутным ветром.

Подробнее здесь: https://stackoverflow.com/questions/793 ... go-viewset
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»