From 6a6286afb85db0f71549ca7f4678486911c4be6e Mon Sep 17 00:00:00 2001 From: SageCodeCoplAL08 Date: Fri, 25 Jun 2021 08:08:02 +0530 Subject: [PATCH 1/3] fix for chromium renderer on linux systems (issue #2348) --- packages/python/plotly/plotly/io/_base_renderers.py | 3 +++ packages/python/plotly/plotly/io/_renderers.py | 6 +++--- .../python/plotly/plotly/tests/test_io/test_renderers.py | 3 +++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/python/plotly/plotly/io/_base_renderers.py b/packages/python/plotly/plotly/io/_base_renderers.py index 8eb947efe8d..79a4443e959 100644 --- a/packages/python/plotly/plotly/io/_base_renderers.py +++ b/packages/python/plotly/plotly/io/_base_renderers.py @@ -669,6 +669,9 @@ def open_html_in_browser(html, using=None, new=0, autoraise=True): if isinstance(html, six.string_types): html = html.encode("utf8") + if isinstance(using, tuple): + using = [i for i in webbrowser._browsers.keys() if any(j in i for j in using)][0] + class OneShotRequestHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) diff --git a/packages/python/plotly/plotly/io/_renderers.py b/packages/python/plotly/plotly/io/_renderers.py index 3850a3369b4..6cbe737dd4a 100644 --- a/packages/python/plotly/plotly/io/_renderers.py +++ b/packages/python/plotly/plotly/io/_renderers.py @@ -437,9 +437,9 @@ def show(fig, renderer=None, validate=True, **kwargs): # External renderers["browser"] = BrowserRenderer(config=config) -renderers["firefox"] = BrowserRenderer(config=config, using="firefox") -renderers["chrome"] = BrowserRenderer(config=config, using="chrome") -renderers["chromium"] = BrowserRenderer(config=config, using="chromium") +renderers["firefox"] = BrowserRenderer(config=config, using=("firefox")) +renderers["chrome"] = BrowserRenderer(config=config, using=("chrome", "google-chrome")) +renderers["chromium"] = BrowserRenderer(config=config, using=("chromium", "chromium-browser")) renderers["iframe"] = IFrameRenderer(config=config, include_plotlyjs=True) renderers["iframe_connected"] = IFrameRenderer(config=config, include_plotlyjs="cdn") renderers["sphinx_gallery"] = SphinxGalleryHtmlRenderer() diff --git a/packages/python/plotly/plotly/tests/test_io/test_renderers.py b/packages/python/plotly/plotly/tests/test_io/test_renderers.py index ee11c412fb7..654929ba2c9 100644 --- a/packages/python/plotly/plotly/tests/test_io/test_renderers.py +++ b/packages/python/plotly/plotly/tests/test_io/test_renderers.py @@ -7,6 +7,7 @@ import pytest import requests import numpy as np +import webbrowser import plotly.graph_objs as go import plotly.io as pio @@ -224,6 +225,8 @@ def test_notebook_connected_show(fig1, name, connected): def test_browser_renderer_show(fig1, renderer): pio.renderers.default = renderer renderer_obj = pio.renderers[renderer] + # scan through webbrowser._browsers.keys() and assign the browser name registered with os + renderer_obj.using = [i for i in webbrowser._browsers.keys() if renderer in i][0] # Setup mocks mock_get = MagicMock(name="test get") From 668b2821e246255e09fcf02dbf9114debe7125f7 Mon Sep 17 00:00:00 2001 From: SageCodeCoplAL08 Date: Fri, 25 Jun 2021 09:28:14 +0530 Subject: [PATCH 2/3] formating using the black formatter --- packages/python/plotly/plotly/io/_base_renderers.py | 4 +++- packages/python/plotly/plotly/io/_renderers.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/python/plotly/plotly/io/_base_renderers.py b/packages/python/plotly/plotly/io/_base_renderers.py index 79a4443e959..de776619628 100644 --- a/packages/python/plotly/plotly/io/_base_renderers.py +++ b/packages/python/plotly/plotly/io/_base_renderers.py @@ -670,7 +670,9 @@ def open_html_in_browser(html, using=None, new=0, autoraise=True): html = html.encode("utf8") if isinstance(using, tuple): - using = [i for i in webbrowser._browsers.keys() if any(j in i for j in using)][0] + using = [i for i in webbrowser._browsers.keys() if any(j in i for j in using)][ + 0 + ] class OneShotRequestHandler(BaseHTTPRequestHandler): def do_GET(self): diff --git a/packages/python/plotly/plotly/io/_renderers.py b/packages/python/plotly/plotly/io/_renderers.py index 6cbe737dd4a..ce175589d25 100644 --- a/packages/python/plotly/plotly/io/_renderers.py +++ b/packages/python/plotly/plotly/io/_renderers.py @@ -439,7 +439,9 @@ def show(fig, renderer=None, validate=True, **kwargs): renderers["browser"] = BrowserRenderer(config=config) renderers["firefox"] = BrowserRenderer(config=config, using=("firefox")) renderers["chrome"] = BrowserRenderer(config=config, using=("chrome", "google-chrome")) -renderers["chromium"] = BrowserRenderer(config=config, using=("chromium", "chromium-browser")) +renderers["chromium"] = BrowserRenderer( + config=config, using=("chromium", "chromium-browser") +) renderers["iframe"] = IFrameRenderer(config=config, include_plotlyjs=True) renderers["iframe_connected"] = IFrameRenderer(config=config, include_plotlyjs="cdn") renderers["sphinx_gallery"] = SphinxGalleryHtmlRenderer() From 712684c621f509175162d2257edfb4cec245c762 Mon Sep 17 00:00:00 2001 From: SageCodeCoplAL08 Date: Wed, 21 Jul 2021 16:36:06 +0530 Subject: [PATCH 3/3] addressing comments on the pull request, modifying the exception statements to be more meaningful while also optimising the code --- packages/python/plotly/plotly/io/_base_renderers.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/python/plotly/plotly/io/_base_renderers.py b/packages/python/plotly/plotly/io/_base_renderers.py index de776619628..66befb8bec7 100644 --- a/packages/python/plotly/plotly/io/_base_renderers.py +++ b/packages/python/plotly/plotly/io/_base_renderers.py @@ -670,9 +670,14 @@ def open_html_in_browser(html, using=None, new=0, autoraise=True): html = html.encode("utf8") if isinstance(using, tuple): - using = [i for i in webbrowser._browsers.keys() if any(j in i for j in using)][ - 0 - ] + try: + using = [i for i in webbrowser._browsers.keys() if i in using][0] + except IndexError: + raise ValueError( + """ +Unable to find the given browser. +Try one among the following 'chrome', 'chromium', 'firefox' or 'default' """ + ) class OneShotRequestHandler(BaseHTTPRequestHandler): def do_GET(self):