Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/nbconvert/exporters/qt_exporter.py: 33%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

42 statements  

1"""A qt exporter.""" 

2 

3import os 

4import sys 

5import tempfile 

6 

7from traitlets import default 

8 

9from .html import HTMLExporter 

10 

11 

12class QtExporter(HTMLExporter): 

13 """A qt exporter.""" 

14 

15 paginate = None 

16 format = "" 

17 

18 @default("file_extension") 

19 def _file_extension_default(self): 

20 return ".html" 

21 

22 def _check_launch_reqs(self): 

23 if sys.platform.startswith("win") and self.format == "png": 

24 msg = "Exporting to PNG using Qt is currently not supported on Windows." 

25 raise RuntimeError(msg) 

26 from .qt_screenshot import QT_INSTALLED 

27 

28 if not QT_INSTALLED: 

29 msg = ( 

30 f"PyQtWebEngine is not installed to support Qt {self.format.upper()} conversion. " 

31 f"Please install `nbconvert[qt{self.format}]` to enable." 

32 ) 

33 raise RuntimeError(msg) 

34 from .qt_screenshot import QtScreenshot 

35 

36 return QtScreenshot 

37 

38 def _run_pyqtwebengine(self, html): 

39 ext = ".html" 

40 temp_file = tempfile.NamedTemporaryFile(suffix=ext, delete=False) 

41 filename = f"{temp_file.name[:-len(ext)]}.{self.format}" 

42 with temp_file: 

43 temp_file.write(html.encode("utf-8")) 

44 try: 

45 QtScreenshot = self._check_launch_reqs() 

46 s = QtScreenshot() 

47 s.capture(f"file://{temp_file.name}", filename, self.paginate) 

48 finally: 

49 # Ensure the file is deleted even if pyqtwebengine raises an exception 

50 os.unlink(temp_file.name) 

51 return s.data 

52 

53 def from_notebook_node(self, nb, resources=None, **kw): 

54 """Convert from notebook node.""" 

55 self._check_launch_reqs() 

56 html, resources = super().from_notebook_node(nb, resources=resources, **kw) 

57 

58 self.log.info("Building %s", self.format.upper()) 

59 data = self._run_pyqtwebengine(html) 

60 self.log.info("%s successfully created", self.format.upper()) 

61 

62 # convert output extension 

63 # the writer above required it to be html 

64 resources["output_extension"] = f".{self.format}" 

65 

66 return data, resources