public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: dev-python/nbconvert/files/
@ 2020-06-10  6:42 Michał Górny
  0 siblings, 0 replies; 2+ messages in thread
From: Michał Górny @ 2020-06-10  6:42 UTC (permalink / raw
  To: gentoo-commits

commit:     0df2a7212f237067ba7cb8dd8df8489fe51060ba
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 10 06:35:06 2020 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Jun 10 06:42:45 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0df2a721

dev-python/nbconvert: Fix inkscape patch

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 .../files/nbconvert-5.6.1-inkscape-1.patch         | 169 ++++++++++++++++++---
 1 file 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 06e8d06c935..1f997a3c3a3 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}"')


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: dev-python/nbconvert/files/
@ 2022-11-08  8:52 Andrew Ammerlaan
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Ammerlaan @ 2022-11-08  8:52 UTC (permalink / raw
  To: gentoo-commits

commit:     5cc1b10a626073823136d7ebf6a0aa760ea6bdcd
Author:     Michael Mair-Keimberger <mmk <AT> levelnine <DOT> at>
AuthorDate: Tue Nov  8 06:20:14 2022 +0000
Commit:     Andrew Ammerlaan <andrewammerlaan <AT> gentoo <DOT> org>
CommitDate: Tue Nov  8 08:52:39 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5cc1b10a

dev-python/nbconvert: remove unused patch(es)

Signed-off-by: Michael Mair-Keimberger <mmk <AT> levelnine.at>
Closes: https://github.com/gentoo/gentoo/pull/28183
Signed-off-by: Andrew Ammerlaan <andrewammerlaan <AT> gentoo.org>

 .../files/nbconvert-6.5.0-mistune-2.patch          | 339 ---------------------
 1 file changed, 339 deletions(-)

diff --git a/dev-python/nbconvert/files/nbconvert-6.5.0-mistune-2.patch b/dev-python/nbconvert/files/nbconvert-6.5.0-mistune-2.patch
deleted file mode 100644
index 4a3f4731b32d..000000000000
--- a/dev-python/nbconvert/files/nbconvert-6.5.0-mistune-2.patch
+++ /dev/null
@@ -1,339 +0,0 @@
-From 6e5ba41803cc8c3192f001b3ede9b74454220bda Mon Sep 17 00:00:00 2001
-From: Tiago de Paula <tiagodepalves@gmail.com>
-Date: Mon, 9 May 2022 09:39:31 -0300
-Subject: [PATCH] Update to Mistune 2.0.2 (#1764)
-
-Co-authored-by: Steven Silvester <steven.silvester@ieee.org>
----
- nbconvert/filters/markdown_mistune.py | 212 ++++++++++++++------------
- setup.py                              |   2 +-
- 2 files changed, 119 insertions(+), 95 deletions(-)
-
-diff --git a/nbconvert/filters/markdown_mistune.py b/nbconvert/filters/markdown_mistune.py
-index 382a5388..636e1e8c 100644
---- a/nbconvert/filters/markdown_mistune.py
-+++ b/nbconvert/filters/markdown_mistune.py
-@@ -21,7 +21,7 @@ except ImportError:
-     from cgi import escape as html_escape
- 
- import bs4
--import mistune
-+from mistune import BlockParser, HTMLRenderer, InlineParser, Markdown
- from pygments import highlight
- from pygments.formatters import HtmlFormatter
- from pygments.lexers import get_lexer_by_name
-@@ -34,158 +34,183 @@ class InvalidNotebook(Exception):
-     pass
- 
- 
--class MathBlockGrammar(mistune.BlockGrammar):
--    """This defines a single regex comprised of the different patterns that
--    identify math content spanning multiple lines. These are used by the
--    MathBlockLexer.
-+class MathBlockParser(BlockParser):
-+    """This acts as a pass-through to the MathInlineParser. It is needed in
-+    order to avoid other block level rules splitting math sections apart.
-     """
- 
--    multi_math_str = "|".join(
--        [r"^\$\$.*?\$\$", r"^\\\\\[.*?\\\\\]", r"^\\begin\{([a-z]*\*?)\}(.*?)\\end\{\1\}"]
-+    MULTILINE_MATH = re.compile(
-+        r"(?<!\\)[$]{2}.*?(?<!\\)[$]{2}|"
-+        r"\\\\\[.*?\\\\\]|"
-+        r"\\begin\{([a-z]*\*?)\}.*?\\end\{\1\}",
-+        re.DOTALL,
-     )
--    multiline_math = re.compile(multi_math_str, re.DOTALL)
- 
-+    RULE_NAMES = ("multiline_math",) + BlockParser.RULE_NAMES
- 
--class MathBlockLexer(mistune.BlockLexer):
--    """This acts as a pass-through to the MathInlineLexer. It is needed in
--    order to avoid other block level rules splitting math sections apart.
--    """
-+    # Regex for header that doesn't require space after '#'
-+    AXT_HEADING = re.compile(r" {0,3}(#{1,6})(?!#+)\s*([^\n]*?)$")
- 
--    default_rules = ["multiline_math"] + mistune.BlockLexer.default_rules
-+    def parse_multiline_math(self, m, state):
-+        """Pass token through mutiline math."""
-+        return {"type": "multiline_math", "text": m.group(0)}
- 
--    def __init__(self, rules=None, **kwargs):
--        if rules is None:
--            rules = MathBlockGrammar()
--        super().__init__(rules, **kwargs)
- 
--    def parse_multiline_math(self, m):
--        """Add token to pass through mutiline math."""
--        self.tokens.append({"type": "multiline_math", "text": m.group(0)})
-+def _dotall(pattern):
-+    """Make the '.' special character match any character inside the pattern, including a newline.
- 
--
--class MathInlineGrammar(mistune.InlineGrammar):
--    """This defines different ways of declaring math objects that should be
--    passed through to mathjax unaffected. These are used by the MathInlineLexer.
-+    This is implemented with the inline flag `(?s:...)` and is equivalent to using `re.DOTALL` when
-+    it is the only pattern used. It is necessary since `mistune>=2.0.0`, where the pattern is passed
-+    to the undocumented `re.Scanner`.
-     """
--
--    inline_math = re.compile(r"^\$(.+?)\$|^\\\\\((.+?)\\\\\)", re.DOTALL)
--    block_math = re.compile(r"^\$\$(.*?)\$\$|^\\\\\[(.*?)\\\\\]", re.DOTALL)
--    latex_environment = re.compile(r"^\\begin\{([a-z]*\*?)\}(.*?)\\end\{\1\}", re.DOTALL)
--    text = re.compile(r"^[\s\S]+?(?=[\\<!\[_*`~$]|https?://| {2,}\n|$)")
-+    return f"(?s:{pattern})"
- 
- 
--class MathInlineLexer(mistune.InlineLexer):
--    r"""This interprets the content of LaTeX style math objects using the rules
--    defined by the MathInlineGrammar.
-+class MathInlineParser(InlineParser):
-+    r"""This interprets the content of LaTeX style math objects.
- 
-     In particular this grabs ``$$...$$``, ``\\[...\\]``, ``\\(...\\)``, ``$...$``,
-     and ``\begin{foo}...\end{foo}`` styles for declaring mathematics. It strips
-     delimiters from all these varieties, and extracts the type of environment
-     in the last case (``foo`` in this example).
-     """
--    default_rules = [
--        "block_math",
--        "inline_math",
-+    BLOCK_MATH_TEX = _dotall(r"(?<!\\)\$\$(.*?)(?<!\\)\$\$")
-+    BLOCK_MATH_LATEX = _dotall(r"(?<!\\)\\\\\[(.*?)(?<!\\)\\\\\]")
-+    INLINE_MATH_TEX = _dotall(r"(?<![$\\])\$(.+?)(?<![$\\])\$")
-+    INLINE_MATH_LATEX = _dotall(r"(?<!\\)\\\\\((.*?)(?<!\\)\\\\\)")
-+    LATEX_ENVIRONMENT = _dotall(r"\\begin\{([a-z]*\*?)\}(.*?)\\end\{\1\}")
-+
-+    # The order is important here
-+    RULE_NAMES = (
-+        "block_math_tex",
-+        "block_math_latex",
-+        "inline_math_tex",
-+        "inline_math_latex",
-         "latex_environment",
--    ] + mistune.InlineLexer.default_rules
--
--    def __init__(self, renderer, rules=None, **kwargs):
--        if rules is None:
--            rules = MathInlineGrammar()
--        super().__init__(renderer, rules, **kwargs)
--
--    def output_inline_math(self, m):
--        return self.renderer.inline_math(m.group(1) or m.group(2))
--
--    def output_block_math(self, m):
--        return self.renderer.block_math(m.group(1) or m.group(2) or "")
--
--    def output_latex_environment(self, m):
--        return self.renderer.latex_environment(m.group(1), m.group(2))
--
--
--class MarkdownWithMath(mistune.Markdown):
--    def __init__(self, renderer, **kwargs):
--        if "inline" not in kwargs:
--            kwargs["inline"] = MathInlineLexer
--        if "block" not in kwargs:
--            kwargs["block"] = MathBlockLexer
--        super().__init__(renderer, **kwargs)
--
--    def output_multiline_math(self):
--        return self.inline(self.token["text"])
--
--
--class IPythonRenderer(mistune.Renderer):
--    def block_code(self, code, lang):
--        if lang:
-+    ) + InlineParser.RULE_NAMES
-+
-+    def parse_block_math_tex(self, m, state):
-+        # sometimes the Scanner keeps the final '$$', so we use the
-+        # full matched string and remove the math markers
-+        text = m.group(0)[2:-2]
-+        return "block_math", text
-+
-+    def parse_block_math_latex(self, m, state):
-+        text = m.group(1)
-+        return "block_math", text
-+
-+    def parse_inline_math_tex(self, m, state):
-+        text = m.group(1)
-+        return "inline_math", text
-+
-+    def parse_inline_math_latex(self, m, state):
-+        text = m.group(1)
-+        return "inline_math", text
-+
-+    def parse_latex_environment(self, m, state):
-+        name, text = m.group(1), m.group(2)
-+        return "latex_environment", name, text
-+
-+
-+class MarkdownWithMath(Markdown):
-+    def __init__(self, renderer, block=None, inline=None, plugins=None):
-+        if block is None:
-+            block = MathBlockParser()
-+        if inline is None:
-+            inline = MathInlineParser(renderer, hard_wrap=False)
-+        super().__init__(renderer, block, inline, plugins)
-+
-+    def render(self, s):
-+        """Compatibility method with `mistune==0.8.4`."""
-+        return self.parse(s)
-+
-+
-+class IPythonRenderer(HTMLRenderer):
-+    def __init__(
-+        self,
-+        escape=True,
-+        allow_harmful_protocols=True,
-+        embed_images=False,
-+        exclude_anchor_links=False,
-+        anchor_link_text="¶",
-+        path="",
-+        attachments=None,
-+    ):
-+        super().__init__(escape, allow_harmful_protocols)
-+        self.embed_images = embed_images
-+        self.exclude_anchor_links = exclude_anchor_links
-+        self.anchor_link_text = anchor_link_text
-+        self.path = path
-+        if attachments is not None:
-+            self.attachments = attachments
-+        else:
-+            self.attachments = {}
-+
-+    def block_code(self, code, info=None):
-+        if info:
-             try:
-+                lang = info.strip().split(None, 1)[0]
-                 lexer = get_lexer_by_name(lang, stripall=True)
-             except ClassNotFound:
-                 code = lang + "\n" + code
-                 lang = None
- 
-         if not lang:
--            return "\n<pre><code>%s</code></pre>\n" % mistune.escape(code)
-+            return super().block_code(code)
- 
-         formatter = HtmlFormatter()
-         return highlight(code, lexer, formatter)
- 
-     def block_html(self, html):
--        embed_images = self.options.get("embed_images", False)
--
--        if embed_images:
-+        if self.embed_images:
-             html = self._html_embed_images(html)
- 
-         return super().block_html(html)
- 
-     def inline_html(self, html):
--        embed_images = self.options.get("embed_images", False)
--
--        if embed_images:
-+        if self.embed_images:
-             html = self._html_embed_images(html)
- 
-         return super().inline_html(html)
- 
--    def header(self, text, level, raw=None):
--        html = super().header(text, level, raw=raw)
--        if self.options.get("exclude_anchor_links"):
-+    def heading(self, text, level):
-+        html = super().heading(text, level)
-+        if self.exclude_anchor_links:
-             return html
--        anchor_link_text = self.options.get("anchor_link_text", "¶")
--        return add_anchor(html, anchor_link_text=anchor_link_text)
-+        return add_anchor(html, anchor_link_text=self.anchor_link_text)
- 
-     def escape_html(self, text):
-         return html_escape(text)
- 
-+    def multiline_math(self, text):
-+        return text
-+
-     def block_math(self, text):
--        return "$$%s$$" % self.escape_html(text)
-+        return f"$${self.escape_html(text)}$$"
- 
-     def latex_environment(self, name, text):
--        name = self.escape_html(name)
--        text = self.escape_html(text)
--        return rf"\begin{{{name}}}{text}\end{{{name}}}"
-+        name, text = self.escape_html(name), self.escape_html(text)
-+        return f"\\begin{{{name}}}{text}\\end{{{name}}}"
- 
-     def inline_math(self, text):
--        return "$%s$" % self.escape_html(text)
-+        return f"${self.escape_html(text)}$"
- 
--    def image(self, src, title, text):
-+    def image(self, src, text, title):
-         """Rendering a image with title and text.
- 
-         :param src: source link of the image.
--        :param title: title text of the image.
-         :param text: alt text of the image.
-+        :param title: title text of the image.
-         """
--        attachments = self.options.get("attachments", {})
-         attachment_prefix = "attachment:"
--        embed_images = self.options.get("embed_images", False)
- 
-         if src.startswith(attachment_prefix):
-             name = src[len(attachment_prefix) :]
- 
--            if name not in attachments:
-+            if name not in self.attachments:
-                 raise InvalidNotebook(f"missing attachment: {name}")
- 
--            attachment = attachments[name]
-+            attachment = self.attachments[name]
-             # we choose vector over raster, and lossless over lossy
-             preferred_mime_types = ["image/svg+xml", "image/png", "image/jpeg"]
-             for preferred_mime_type in preferred_mime_types:
-@@ -197,13 +222,13 @@ class IPythonRenderer(mistune.Renderer):
-             data = attachment[mime_type]
-             src = "data:" + mime_type + ";base64," + data
- 
--        elif embed_images:
-+        elif self.embed_images:
-             base64_url = self._src_to_base64(src)
- 
-             if base64_url is not None:
-                 src = base64_url
- 
--        return super().image(src, title, text)
-+        return super().image(src, text, title)
- 
-     def _src_to_base64(self, src):
-         """Turn the source file into a base64 url.
-@@ -211,8 +236,7 @@ class IPythonRenderer(mistune.Renderer):
-         :param src: source link of the file.
-         :return: the base64 url or None if the file was not found.
-         """
--        path = self.options.get("path", "")
--        src_path = os.path.join(path, src)
-+        src_path = os.path.join(self.path, src)
- 
-         if not os.path.exists(src_path):
-             return None
-diff --git a/setup.py b/setup.py
-index 7220a875..2dfa2534 100644
---- a/setup.py
-+++ b/setup.py
-@@ -245,7 +245,7 @@ setup_args["install_requires"] = [
-     "jupyter_core>=4.7",
-     "jupyterlab_pygments",
-     "MarkupSafe>=2.0",
--    "mistune>=0.8.1,<2",
-+    "mistune>=2.0.2",
-     "nbclient>=0.5.0",
-     "nbformat>=5.1",
-     "packaging",
--- 
-2.35.1
-


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-11-08  8:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-10  6:42 [gentoo-commits] repo/gentoo:master commit in: dev-python/nbconvert/files/ Michał Górny
  -- strict thread matches above, loose matches on Subject: below --
2022-11-08  8:52 Andrew Ammerlaan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox