commit:     332fddbf43e73b8695c25f5424a558373deb0657
Author:     Alfredo Tupone <tupone <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 26 10:03:25 2022 +0000
Commit:     Alfredo Tupone <tupone <AT> gentoo <DOT> org>
CommitDate: Sun Jun 26 10:03:25 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=332fddbf

sci-visualization/dash: fix werkzeug 2.1.0 import

Closes: https://bugs.gentoo.org/844142
Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Alfredo Tupone <tupone <AT> gentoo.org>

 sci-visualization/dash/dash-1.21.0-r1.ebuild       | 38 +++++++++
 ...g-2.1.0-import-dev-tools-error-html-rende.patch | 98 ++++++++++++++++++++++
 2 files changed, 136 insertions(+)

diff --git a/sci-visualization/dash/dash-1.21.0-r1.ebuild 
b/sci-visualization/dash/dash-1.21.0-r1.ebuild
new file mode 100644
index 000000000000..9d388cb84220
--- /dev/null
+++ b/sci-visualization/dash/dash-1.21.0-r1.ebuild
@@ -0,0 +1,38 @@
+# Copyright 2021-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{8..10} )
+inherit distutils-r1
+
+DESCRIPTION="Python framework for building ML & data science web apps"
+HOMEPAGE="https://github.com/plotly/dash";
+SRC_URI="https://github.com/plotly/${PN}/archive/refs/tags/v${PV}.tar.gz
+       -> ${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+# Test need some packages not yet in the tree
+# flask_talisman
+# percy
+# ...
+RESTRICT="test"
+
+RDEPEND="
+       dev-python/future[${PYTHON_USEDEP}]
+       sci-visualization/dash-table[${PYTHON_USEDEP}]
+       sci-visualization/dash-html-components[${PYTHON_USEDEP}]
+       sci-visualization/dash-core-components[${PYTHON_USEDEP}]
+       dev-python/plotly[${PYTHON_USEDEP}]
+       dev-python/flask-compress[${PYTHON_USEDEP}]"
+DEPEND="${RDEPEND}
+       test? ( dev-python/beautifulsoup4 )"
+BDEPEND=""
+
+distutils_enable_tests pytest
+
+PATCHES=(
+       
"${FILESDIR}"/0001-Fix-werkzeug-2.1.0-import-dev-tools-error-html-rende.patch
+)

diff --git 
a/sci-visualization/dash/files/0001-Fix-werkzeug-2.1.0-import-dev-tools-error-html-rende.patch
 
b/sci-visualization/dash/files/0001-Fix-werkzeug-2.1.0-import-dev-tools-error-html-rende.patch
new file mode 100644
index 000000000000..7f19380dc7cb
--- /dev/null
+++ 
b/sci-visualization/dash/files/0001-Fix-werkzeug-2.1.0-import-dev-tools-error-html-rende.patch
@@ -0,0 +1,98 @@
+From f9079bfd8a9576947655e1fee0dc343171c21e37 Mon Sep 17 00:00:00 2001
+From: philippe <[email protected]>
+Date: Tue, 29 Mar 2022 12:17:40 -0400
+Subject: [PATCH] Fix werkzeug 2.1.0 import & dev tools error html rendering.
+
+---
+ .../error/FrontEnd/FrontEndError.react.js     |  2 +-
+ dash/dash.py                                  | 42 +++++++++++++++----
+ 2 files changed, 34 insertions(+), 10 deletions(-)
+
+diff --git 
a/dash/dash-renderer/src/components/error/FrontEnd/FrontEndError.react.js 
b/dash/dash-renderer/src/components/error/FrontEnd/FrontEndError.react.js
+index 5703add4..49939ea1 100644
+--- a/dash/dash-renderer/src/components/error/FrontEnd/FrontEndError.react.js
++++ b/dash/dash-renderer/src/components/error/FrontEnd/FrontEndError.react.js
+@@ -110,7 +110,7 @@ function UnconnectedErrorContent({error, base}) {
+             )}
+             {/* Backend Error */}
+             {typeof error.html !== 'string' ? null : error.html.indexOf(
+-                  '<!DOCTYPE HTML'
++                  '<!DOCTYPE'
+               ) === 0 ? (
+                 <div className='dash-be-error__st'>
+                     <div className='dash-backend-error'>
+diff --git a/dash/dash.py b/dash/dash.py
+index b4a3adf0..3d5dae25 100644
+--- a/dash/dash.py
++++ b/dash/dash.py
+@@ -19,7 +19,10 @@ from future.moves.urllib.parse import urlparse
+ 
+ import flask
+ from flask_compress import Compress
+-from werkzeug.debug.tbtools import get_current_traceback
++
++from werkzeug.debug import tbtools
++from werkzeug.security import gen_salt
++
+ from pkg_resources import get_distribution, parse_version
+ 
+ import plotly
+@@ -91,6 +94,30 @@ _re_index_scripts_id = 'src="[^"]*dash[-_]renderer[^"]*"', 
"dash-renderer"
+ _re_renderer_scripts_id = 'id="_dash-renderer', "new DashRenderer"
+ 
+ 
++def _get_traceback(secret, error):
++    def _get_skip(text):
++        skip = 0
++        for i, line in enumerate(text.splitlines()):
++            if "%% callback invoked %%" in line:
++                skip = int((i + 1) / 2)
++                break
++        return skip
++
++    # werkzeug<2.1.0
++    if hasattr(tbtools, "get_current_traceback"):
++        tb = tbtools.get_current_traceback()
++        skip = _get_skip(tb.plaintext)
++        return tbtools.get_current_traceback(skip=skip).render_full()
++
++    tb = tbtools.DebugTraceback(error)  # pylint: disable=no-member
++    skip = _get_skip(tb.render_traceback_text())
++
++    # pylint: disable=no-member
++    return tbtools.DebugTraceback(error, skip=skip).render_debugger_html(
++        True, secret, True
++    )
++
++
+ class _NoUpdate(object):
+     # pylint: disable=too-few-public-methods
+     pass
+@@ -1463,19 +1490,16 @@ class Dash(object):
+ 
+         if debug and dev_tools.prune_errors:
+ 
++            secret = gen_salt(20)
++
+             @self.server.errorhandler(Exception)
+-            def _wrap_errors(_):
++            def _wrap_errors(error):
+                 # find the callback invocation, if the error is from a 
callback
+                 # and skip the traceback up to that point
+                 # if the error didn't come from inside a callback, we won't
+                 # skip anything.
+-                tb = get_current_traceback()
+-                skip = 0
+-                for i, line in enumerate(tb.plaintext.splitlines()):
+-                    if "%% callback invoked %%" in line:
+-                        skip = int((i + 1) / 2)
+-                        break
+-                return get_current_traceback(skip=skip).render_full(), 500
++                tb = _get_traceback(secret, error)
++                return tb, 500
+ 
+         if debug and dev_tools.ui:
+ 
+-- 
+2.35.1
+

Reply via email to