import json from io import BytesIO from re import match from zipfile import ZipFile import asyncio from pyppeteer import launch from rest_framework.renderers import JSONRenderer from cookbook.helper.image_processing import get_filetype from cookbook.integration.integration import Integration from cookbook.serializer import RecipeExportSerializer import django.core.management.commands.runserver as runserver class PDFexport(Integration): def get_recipe_from_file(self, file): raise NotImplementedError('Method not implemented in storage integration') async def get_files_from_recipes_async(self, recipes, cookie): cmd = runserver.Command() browser = await launch( handleSIGINT=False, handleSIGTERM=False, handleSIGHUP=False, ignoreHTTPSErrors=True ) cookies = {'domain': cmd.default_addr, 'name': 'sessionid', 'value': cookie['sessionid'], } options = {'format': 'letter', 'margin': { 'top': '0.75in', 'bottom': '0.75in', 'left': '0.75in', 'right': '0.75in', } } page = await browser.newPage() await page.emulateMedia('print') await page.setCookie(cookies) files = [] for recipe in recipes: await page.goto('http://' + cmd.default_addr + ':' + cmd.default_port + '/view/recipe/' + str(recipe.id), {'waitUntil': 'networkidle0', }) files.append([recipe.name + '.pdf', await page.pdf(options)]) await browser.close() return files def get_files_from_recipes(self, recipes, cookie): return asyncio.run(self.get_files_from_recipes_async(recipes, cookie))