diff options
author | Michał Górny <mgorny@gentoo.org> | 2020-06-10 08:35:06 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2020-06-10 08:42:45 +0200 |
commit | 0df2a7212f237067ba7cb8dd8df8489fe51060ba (patch) | |
tree | e4d8fe4981aa84d20e12528bc2542b8d3cdf7dd4 /dev-python/nbconvert | |
parent | dev-python/nbconvert: Remove doc (diff) | |
download | gentoo-0df2a7212f237067ba7cb8dd8df8489fe51060ba.tar.gz gentoo-0df2a7212f237067ba7cb8dd8df8489fe51060ba.tar.bz2 gentoo-0df2a7212f237067ba7cb8dd8df8489fe51060ba.zip |
dev-python/nbconvert: Fix inkscape patch
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'dev-python/nbconvert')
-rw-r--r-- | dev-python/nbconvert/files/nbconvert-5.6.1-inkscape-1.patch | 169 |
1 files changed, 144 insertions, 25 deletions
diff --git a/dev-python/nbconvert/files/nbconvert-5.6.1-inkscape-1.patch b/dev-python/nbconvert/files/nbconvert-5.6.1-inkscape-1.patch index 06e8d06c935f..1f997a3c3a32 100644 --- a/dev-python/nbconvert/files/nbconvert-5.6.1-inkscape-1.patch +++ b/dev-python/nbconvert/files/nbconvert-5.6.1-inkscape-1.patch @@ -1,40 +1,159 @@ -From 61757ce936ab37855a5289d31ef59ef898061bcf Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz> -Date: Sun, 3 May 2020 15:41:07 +0200 -Subject: [PATCH] Fix CLI options given to Inkscape 1.0rc1+ - -Fixes https://github.com/jupyter/nbconvert/issues/1246 ---- - nbconvert/preprocessors/svg2pdf.py | 7 ++++--- - nbconvert/preprocessors/tests/test_svg2pdf.py | 2 +- - 2 files changed, 5 insertions(+), 4 deletions(-) - diff --git a/nbconvert/preprocessors/svg2pdf.py b/nbconvert/preprocessors/svg2pdf.py -index d4c48af6..af6a7dea 100644 +index aff14d9f..de51f3b8 100644 --- a/nbconvert/preprocessors/svg2pdf.py +++ b/nbconvert/preprocessors/svg2pdf.py -@@ -76,10 +76,11 @@ def _inkscape_version_default(self): +@@ -1,4 +1,4 @@ +-"""Module containing a preprocessor that converts outputs in the notebook from ++"""Module containing a preprocessor that converts outputs in the notebook from + one format to another. + """ + +@@ -17,11 +17,7 @@ from traitlets import Unicode, default + + from .convertfigures import ConvertFiguresPreprocessor + +-if sys.version_info >= (3,3): +- from shutil import which +- get_inkscape_path = which('inkscape') +-else: +- get_inkscape_path = None ++from shutil import which + + + INKSCAPE_APP = '/Applications/Inkscape.app/Contents/Resources/bin/inkscape' +@@ -46,26 +42,49 @@ class SVG2PDFPreprocessor(ConvertFiguresPreprocessor): + def _to_format_default(self): + return 'application/pdf' + ++ inkscape_version = Unicode( ++ help="""The version of inkscpae being used. ++ ++ This affects how the conversion command is run. ++ """ ++ ).tag(config=True) ++ ++ @default('inkscape_version') ++ def _inkscape_version_default(self): ++ p = subprocess.Popen([self.inkscape, '--version'], ++ stdout=subprocess.PIPE, ++ stderr=subprocess.PIPE) ++ output, _ = p.communicate() ++ if p.returncode != 0: ++ raise RuntimeError("Unable to find inkscape executable --version") ++ return output.decode('utf-8').split(' ')[1] ++ + command = Unicode( + help="""The command to use for converting SVG to PDF +- ++ + This string is a template, which will be formatted with the keys + to_filename and from_filename. +- ++ + The conversion call must read the SVG from {from_filename}, + and write a PDF to {to_filename}. + """).tag(config=True) + @default('command') def _command_default(self): - major_verison = self.inkscape_version.split('.')[0] -- export_option = '--export-file' if int(major_verison) > 0 else '--export-pdf' +- return self.inkscape + \ +- ' --without-gui --export-pdf="{to_filename}" "{from_filename}"' +- ++ major_verison = self.inkscape_version.split('.')[0] + export_option = ' --export-filename' if int(major_verison) > 0 else ' --export-pdf' + gui_option = '' if int(major_verison) > 0 else ' --without-gui' - -- return '{inkscape} --without-gui {export_option}='.format( -- inkscape=self.inkscape, export_option=export_option ++ + return '{inkscape}{gui_option}{export_option}='.format( + inkscape=self.inkscape, export_option=export_option, gui_option=gui_option - ) + '"{to_filename}" "{from_filename}"' - ++ ) + '"{to_filename}" "{from_filename}"' ++ inkscape = Unicode(help="The path to Inkscape, if necessary").tag(config=True) + @default('inkscape') + def _inkscape_default(self): +- if get_inkscape_path is not None: +- return get_inkscape_path ++ inkscape_path = which('inkscape') ++ if inkscape_path is not None: ++ return inkscape_path + if sys.platform == "darwin": + if os.path.isfile(INKSCAPE_APP): + return INKSCAPE_APP +@@ -85,22 +104,22 @@ class SVG2PDFPreprocessor(ConvertFiguresPreprocessor): + Convert a single SVG figure to PDF. Returns converted data. + """ + +- #Work in a temporary directory ++ # Work in a temporary directory + with TemporaryDirectory() as tmpdir: +- +- #Write fig to temp file ++ ++ # Write fig to temp file + input_filename = os.path.join(tmpdir, 'figure.svg') + # SVG data is unicode text + with io.open(input_filename, 'w', encoding='utf8') as f: + f.write(cast_unicode_py2(data)) + +- #Call conversion application ++ # Call conversion application + output_filename = os.path.join(tmpdir, 'figure.pdf') +- shell = self.command.format(from_filename=input_filename, ++ shell = self.command.format(from_filename=input_filename, + to_filename=output_filename) +- subprocess.call(shell, shell=True) #Shell=True okay since input is trusted. ++ subprocess.call(shell, shell=True) # Shell=True okay since input is trusted. + +- #Read output from drive ++ # Read output from drive + # return value expects a filename + if os.path.isfile(output_filename): + with open(output_filename, 'rb') as f: diff --git a/nbconvert/preprocessors/tests/test_svg2pdf.py b/nbconvert/preprocessors/tests/test_svg2pdf.py -index 5e13b282..d9ccec8c 100644 +index c42222c7..d9ccec8c 100644 --- a/nbconvert/preprocessors/tests/test_svg2pdf.py +++ b/nbconvert/preprocessors/tests/test_svg2pdf.py -@@ -91,4 +91,4 @@ def test_inkscape_pre_v1_command(self): +@@ -4,6 +4,7 @@ + # Distributed under the terms of the Modified BSD License. + + from nbformat import v4 as nbformat ++from unittest.mock import patch, Mock + + from .base import PreprocessorTestsBase + from ..svg2pdf import SVG2PDFPreprocessor +@@ -51,9 +52,9 @@ class Testsvg2pdf(PreprocessorTestsBase): + return nbformat.new_notebook(cells=cells) + + +- def build_preprocessor(self): ++ def build_preprocessor(self, **kwargs): + """Make an instance of a preprocessor""" +- preprocessor = SVG2PDFPreprocessor() ++ preprocessor = SVG2PDFPreprocessor(**kwargs) + preprocessor.enabled = True + return preprocessor - def test_inkscape_v1_command(self): - preprocessor = self.build_preprocessor(inkscape='fake-inkscape', inkscape_version='1.0beta2') -- self.assertEquals(preprocessor.command, 'fake-inkscape --without-gui --export-file="{to_filename}" "{from_filename}"') +@@ -71,4 +72,23 @@ class Testsvg2pdf(PreprocessorTestsBase): + preprocessor = self.build_preprocessor() + nb, res = preprocessor(nb, res) + self.assertIn('application/pdf', nb.cells[0].outputs[0].data) +- ++ ++ @patch('subprocess.Popen') ++ def test_inkscape_version_default(self, mock_popen): ++ mock_popen().communicate.return_value = (b'Inkscape 0.92.3 (2405546, 2018-03-11)', b'') ++ mock_popen().returncode = 0 ++ ++ preprocessor = self.build_preprocessor() ++ self.assertEquals(preprocessor.inkscape_version, '0.92.3') ++ ++ def test_inkscape_pre_v1_command(self): ++ preprocessor = self.build_preprocessor(inkscape_version='0.92.3') ++ self.assertEquals(preprocessor.command, '0.92.3') ++ ++ def test_inkscape_pre_v1_command(self): ++ preprocessor = self.build_preprocessor(inkscape='fake-inkscape', inkscape_version='0.92.3') ++ self.assertEquals(preprocessor.command, 'fake-inkscape --without-gui --export-pdf="{to_filename}" "{from_filename}"') ++ ++ def test_inkscape_v1_command(self): ++ preprocessor = self.build_preprocessor(inkscape='fake-inkscape', inkscape_version='1.0beta2') + self.assertEquals(preprocessor.command, 'fake-inkscape --export-filename="{to_filename}" "{from_filename}"') |