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

1import asyncio 

2 

3import django.core.management.commands.runserver as runserver 

4from asgiref.sync import sync_to_async 

5from pyppeteer import launch 

6 

7from cookbook.integration.integration import Integration 

8 

9 

10class PDFexport(Integration): 

11 

12 def get_recipe_from_file(self, file): 

13 raise NotImplementedError('Method not implemented in storage integration') 

14 

15 async def get_files_from_recipes_async(self, recipes, el, cookie): 

16 cmd = runserver.Command() 

17 

18 browser = await launch( 

19 handleSIGINT=False, 

20 handleSIGTERM=False, 

21 handleSIGHUP=False, 

22 ignoreHTTPSErrors=True, 

23 ) 

24 

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 } 

34 

35 files = [] 

36 for recipe in recipes: 

37 

38 page = await browser.newPage() 

39 await page.emulateMedia('print') 

40 await page.setCookie(cookies) 

41 

42 await page.goto('http://' + cmd.default_addr + ':' + cmd.default_port + '/view/recipe/' + str(recipe.id), {'waitUntil': 'domcontentloaded'}) 

43 await page.waitForSelector('#printReady') 

44 

45 files.append([recipe.name + '.pdf', await page.pdf(options)]) 

46 await page.close() 

47 

48 el.exported_recipes += 1 

49 el.msg += self.get_recipe_processed_msg(recipe) 

50 await sync_to_async(el.save, thread_sensitive=True)() 

51 

52 await browser.close() 

53 return files 

54 

55 def get_files_from_recipes(self, recipes, el, cookie): 

56 return asyncio.run(self.get_files_from_recipes_async(recipes, el, cookie))