From 5df5e364d1aa4a00fb2ae6604eb7eb9432c3532e Mon Sep 17 00:00:00 2001 From: Ken McGrady Date: Mon, 31 Jan 2022 11:08:28 -0800 Subject: [PATCH 1/3] Keep support for ICO formats by defaulting to PNG if necessary --- e2e/scripts/assets/favicon.ico | Bin 0 -> 1406 bytes e2e/scripts/st_set_page_config_icon.py | 5 ++++ e2e/specs/st_set_page_config.spec.js | 10 +++++++ e2e/specs/st_set_page_config_icon.spec.js | 34 ++++++++++++++++++++++ lib/streamlit/elements/image.py | 2 ++ 5 files changed, 51 insertions(+) create mode 100644 e2e/scripts/assets/favicon.ico create mode 100644 e2e/scripts/st_set_page_config_icon.py create mode 100644 e2e/specs/st_set_page_config_icon.spec.js diff --git a/e2e/scripts/assets/favicon.ico b/e2e/scripts/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..24591070884d908ae1e114bb17148927f4bd3577 GIT binary patch literal 1406 zcmeHEdoa{d6#l$ICG^l!^j5T@s1zww+DI>|C8fRCQc@{1W|Z_W(=?f8@|Y&WRE)<= zW3ootQJF+GWsPBI*gPk(Ye_r1@%wFeSE@h!)Bnz$bIy0Zx!*l=&jIx4v9N&7B8>nm zitMOsDO>7#FriTg#_~V7q3Ale&w8QnsszKZP!ION+^HU-@-kFqcfgic0^_Lf2)NS; z52*@nscpF3!JsfR1EcIH80su_g^GdSH3>d9yhEN!g|E4rL$#8ny;wA) zzl4!vC)Kg2jL%1~S2g;QK47T%1qPbb5J&W(LiiCfnGB|`gXj@u!MJ4vm7(ouyIF^b zxORL=9;A8=k{#j^oybRAO)0X|`oQa35q^15D>C{>v6)dnnFmBE3MBF;_gG1Y{%GTZH%>< zO_m*?U61HEgUEw~7|-&Z7ISRF8Ooek$m01bKNt)!z!*8OfZuFqJ9B8MpOa- literal 0 HcmV?d00001 diff --git a/e2e/scripts/st_set_page_config_icon.py b/e2e/scripts/st_set_page_config_icon.py new file mode 100644 index 000000000000..d1851e632b85 --- /dev/null +++ b/e2e/scripts/st_set_page_config_icon.py @@ -0,0 +1,5 @@ +import streamlit as st + +st.set_page_config( + page_icon="./assets/favicon.ico", +) diff --git a/e2e/specs/st_set_page_config.spec.js b/e2e/specs/st_set_page_config.spec.js index 5922af64ea27..4f672ff67a28 100644 --- a/e2e/specs/st_set_page_config.spec.js +++ b/e2e/specs/st_set_page_config.spec.js @@ -88,4 +88,14 @@ describe("st.set_page_config", () => { cy.title().should("eq", "Change 3"); }); }); + + it("works with .ico files", () => { + cy.getIndexed(".stButton button", 4).click(); + + it("sets the page favicon", () => { + cy.get("link[rel='shortcut icon']") + .invoke("attr", "href") + .should("eq", "https://twemoji.maxcdn.com/2/72x72/1f988.png"); + }); + }); }); diff --git a/e2e/specs/st_set_page_config_icon.spec.js b/e2e/specs/st_set_page_config_icon.spec.js new file mode 100644 index 000000000000..d44a3c116c12 --- /dev/null +++ b/e2e/specs/st_set_page_config_icon.spec.js @@ -0,0 +1,34 @@ +/** + * @license + * Copyright 2018-2022 Streamlit Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +describe("st.set_page_config", () => { + before(() => { + cy.loadApp("http://localhost:3000/"); + }); + + it("sets the page favicon with ico file", () => { + cy.get("link[rel='shortcut icon']") + .invoke("attr", "href") + .then(href => { + expect( + href.endsWith( + "92018b2805266c4cb9a98e90c849ce5b5e7ba6d1af423bd7b7c345da.png" + ) + ).to.be.true; + }); + }); +}); diff --git a/lib/streamlit/elements/image.py b/lib/streamlit/elements/image.py index 7dcc9d034175..2eec49bf7318 100644 --- a/lib/streamlit/elements/image.py +++ b/lib/streamlit/elements/image.py @@ -207,6 +207,8 @@ def _normalize_to_bytes(data, width, output_format): if output_format.lower() == "auto": ext = imghdr.what(None, data) mimetype = mimetypes.guess_type("image.%s" % ext)[0] + if mimetype is None: + mimetype = "image/" + format.lower() else: mimetype = "image/" + format.lower() From a9e7f41554ba6cc3a793a650c507239f3825ed17 Mon Sep 17 00:00:00 2001 From: Ken McGrady Date: Mon, 31 Jan 2022 12:09:18 -0800 Subject: [PATCH 2/3] Update to make cypress tests work --- e2e/scripts/st_set_page_config_icon.py | 2 +- e2e/specs/st_set_page_config.spec.js | 10 ---------- e2e/specs/st_set_page_config_icon.spec.js | 2 +- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/e2e/scripts/st_set_page_config_icon.py b/e2e/scripts/st_set_page_config_icon.py index d1851e632b85..1d074c64485b 100644 --- a/e2e/scripts/st_set_page_config_icon.py +++ b/e2e/scripts/st_set_page_config_icon.py @@ -1,5 +1,5 @@ import streamlit as st st.set_page_config( - page_icon="./assets/favicon.ico", + page_icon="e2e/scripts/assets/favicon.ico", ) diff --git a/e2e/specs/st_set_page_config.spec.js b/e2e/specs/st_set_page_config.spec.js index 4f672ff67a28..5922af64ea27 100644 --- a/e2e/specs/st_set_page_config.spec.js +++ b/e2e/specs/st_set_page_config.spec.js @@ -88,14 +88,4 @@ describe("st.set_page_config", () => { cy.title().should("eq", "Change 3"); }); }); - - it("works with .ico files", () => { - cy.getIndexed(".stButton button", 4).click(); - - it("sets the page favicon", () => { - cy.get("link[rel='shortcut icon']") - .invoke("attr", "href") - .should("eq", "https://twemoji.maxcdn.com/2/72x72/1f988.png"); - }); - }); }); diff --git a/e2e/specs/st_set_page_config_icon.spec.js b/e2e/specs/st_set_page_config_icon.spec.js index d44a3c116c12..5fc6e950cbb2 100644 --- a/e2e/specs/st_set_page_config_icon.spec.js +++ b/e2e/specs/st_set_page_config_icon.spec.js @@ -15,7 +15,7 @@ * limitations under the License. */ -describe("st.set_page_config", () => { +describe("st.set_page_config with ICO", () => { before(() => { cy.loadApp("http://localhost:3000/"); }); From c41d584cc0ed5fb2448095fdc97ff31bd78b115f Mon Sep 17 00:00:00 2001 From: Ken McGrady Date: Mon, 31 Jan 2022 12:23:54 -0800 Subject: [PATCH 3/3] use eq to see why cypress is doing --- e2e/specs/st_set_page_config_icon.spec.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/e2e/specs/st_set_page_config_icon.spec.js b/e2e/specs/st_set_page_config_icon.spec.js index 5fc6e950cbb2..0f92f5a3c99f 100644 --- a/e2e/specs/st_set_page_config_icon.spec.js +++ b/e2e/specs/st_set_page_config_icon.spec.js @@ -23,12 +23,9 @@ describe("st.set_page_config with ICO", () => { it("sets the page favicon with ico file", () => { cy.get("link[rel='shortcut icon']") .invoke("attr", "href") - .then(href => { - expect( - href.endsWith( - "92018b2805266c4cb9a98e90c849ce5b5e7ba6d1af423bd7b7c345da.png" - ) - ).to.be.true; - }); + .should( + "eq", + "http://localhost:8501/media/92018b2805266c4cb9a98e90c849ce5b5e7ba6d1af423bd7b7c345da.png" + ); }); });