Coverage for cookbook/integration/pdfexport.py: 31%
29 statements
« prev ^ index » next coverage.py v7.4.0, created at 2023-12-29 00:47 +0100
« prev ^ index » next coverage.py v7.4.0, created at 2023-12-29 00:47 +0100
1import asyncio
3import django.core.management.commands.runserver as runserver
4from asgiref.sync import sync_to_async
5from pyppeteer import launch
7from cookbook.integration.integration import Integration
10class PDFexport(Integration):
12 def get_recipe_from_file(self, file):
13 raise NotImplementedError('Method not implemented in storage integration')
15 async def get_files_from_recipes_async(self, recipes, el, cookie):
16 cmd = runserver.Command()
18 browser = await launch(
19 handleSIGINT=False,
20 handleSIGTERM=False,
21 handleSIGHUP=False,
22 ignoreHTTPSErrors=True,
23 )
25 cookies = {'domain': cmd.default_addr, 'name': 'sessionid', 'value': cookie['sessionid'], }
26 options = {'format': 'letter',
27 'margin': {
28 'top': '0.75in',
29 'bottom': '0.75in',
30 'left': '0.75in',
31 'right': '0.75in',
32 }
33 }
35 files = []
36 for recipe in recipes:
38 page = await browser.newPage()
39 await page.emulateMedia('print')
40 await page.setCookie(cookies)
42 await page.goto('http://' + cmd.default_addr + ':' + cmd.default_port + '/view/recipe/' + str(recipe.id), {'waitUntil': 'domcontentloaded'})
43 await page.waitForSelector('#printReady')
45 files.append([recipe.name + '.pdf', await page.pdf(options)])
46 await page.close()
48 el.exported_recipes += 1
49 el.msg += self.get_recipe_processed_msg(recipe)
50 await sync_to_async(el.save, thread_sensitive=True)()
52 await browser.close()
53 return files
55 def get_files_from_recipes(self, recipes, el, cookie):
56 return asyncio.run(self.get_files_from_recipes_async(recipes, el, cookie))