summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2020-06-10 08:35:06 +0200
committerMichał Górny <mgorny@gentoo.org>2020-06-10 08:42:45 +0200
commit0df2a7212f237067ba7cb8dd8df8489fe51060ba (patch)
treee4d8fe4981aa84d20e12528bc2542b8d3cdf7dd4 /dev-python/nbconvert/files
parentdev-python/nbconvert: Remove doc (diff)
downloadgentoo-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/files')
-rw-r--r--dev-python/nbconvert/files/nbconvert-5.6.1-inkscape-1.patch169
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}"')