From 08e64802660c01596bb31de8eb9f07eb85fd9825 Mon Sep 17 00:00:00 2001 From: Ali Abid Date: Fri, 24 Dec 2021 08:18:09 +0000 Subject: [PATCH] gradio embed changes --- frontend/craco.config.js | 2 +- frontend/package-lock.json | 36 ++--- frontend/package.json | 4 +- frontend/public/index.html | 3 +- frontend/src/gradio.jsx | 15 +- frontend/src/index.jsx | 4 +- frontend/src/public-path.jsx | 1 + frontend/src/static/img/logo_error.png | Bin 6013 -> 0 bytes frontend/src/static/img/logo_error.svg | 134 ++++++++++++++++++ frontend/src/static/img/logo_loading.jpg | Bin 59848 -> 0 bytes frontend/src/themes/defaults.scss | 17 ++- frontend/src/themes/grass.scss | 4 +- frontend/src/themes/huggingface.scss | 4 +- frontend/src/themes/peach.scss | 4 +- gradio.egg-info/PKG-INFO | 7 +- gradio.egg-info/requires.txt | 26 ++-- gradio/networking.py | 2 +- gradio/templates/frontend/asset-manifest.json | 18 +-- gradio/templates/frontend/index.html | 5 +- upload_to_pypi.sh | 13 +- 20 files changed, 218 insertions(+), 81 deletions(-) create mode 100644 frontend/src/public-path.jsx delete mode 100644 frontend/src/static/img/logo_error.png create mode 100644 frontend/src/static/img/logo_error.svg delete mode 100644 frontend/src/static/img/logo_loading.jpg diff --git a/frontend/craco.config.js b/frontend/craco.config.js index 057cc60ed1..1c369ee8d6 100644 --- a/frontend/craco.config.js +++ b/frontend/craco.config.js @@ -39,7 +39,7 @@ module.exports = { }, style: { postcss: { - plugins: [require("tailwindcss"), require("autoprefixer")] + plugins: [require("postcss-prefixwrap")(".gradio_app"), require("tailwindcss"), require("autoprefixer")] } } }; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1515e1c651..de1b020218 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -22,6 +22,7 @@ "html2canvas-objectfit-fix": "^1.2.0", "jspreadsheet-ce": "^4.7.3", "mime-types": "^2.1.33", + "postcss-prefixwrap": "^1.26.0", "prettier-eslint": "^13.0.0", "prettier-eslint-cli": "^5.0.1", "react": "^17.0.2", @@ -29,7 +30,6 @@ "react-cropper": "^2.1.8", "react-dom": "^17.0.2", "react-json-tree": "^0.15.0", - "react-plotly.js": "^2.5.1", "react-scripts": "4.0.3", "react-webcam": "^5.2.3", "recorder-js": "^1.0.7", @@ -15247,6 +15247,14 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-prefixwrap": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/postcss-prefixwrap/-/postcss-prefixwrap-1.26.0.tgz", + "integrity": "sha512-iJ9yi26g9vDuNTM0GiqJKYx3AABfD7W7WURhP18OCBye/Pc6LNd89VlPCaKKXZxUqptUrMulX1trlXEbw2L3UQ==", + "peerDependencies": { + "postcss": "*" + } + }, "node_modules/postcss-preset-env": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", @@ -17210,18 +17218,6 @@ "react": "^16.3.0 || ^17.0.0" } }, - "node_modules/react-plotly.js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/react-plotly.js/-/react-plotly.js-2.5.1.tgz", - "integrity": "sha512-Oya14whSHvPsYXdI0nHOGs1pZhMzV2edV7HAW1xFHD58Y73m/LbG2Encvyz1tztL0vfjph0JNhiwO8cGBJnlhg==", - "dependencies": { - "prop-types": "^15.7.2" - }, - "peerDependencies": { - "plotly.js": ">1.34.0", - "react": ">0.13.0" - } - }, "node_modules/react-refresh": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", @@ -35516,6 +35512,12 @@ "postcss-values-parser": "^2.0.0" } }, + "postcss-prefixwrap": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/postcss-prefixwrap/-/postcss-prefixwrap-1.26.0.tgz", + "integrity": "sha512-iJ9yi26g9vDuNTM0GiqJKYx3AABfD7W7WURhP18OCBye/Pc6LNd89VlPCaKKXZxUqptUrMulX1trlXEbw2L3UQ==", + "requires": {} + }, "postcss-preset-env": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", @@ -36960,14 +36962,6 @@ "react-base16-styling": "^0.8.0" } }, - "react-plotly.js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/react-plotly.js/-/react-plotly.js-2.5.1.tgz", - "integrity": "sha512-Oya14whSHvPsYXdI0nHOGs1pZhMzV2edV7HAW1xFHD58Y73m/LbG2Encvyz1tztL0vfjph0JNhiwO8cGBJnlhg==", - "requires": { - "prop-types": "^15.7.2" - } - }, "react-refresh": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 7661943f73..e8c6544de5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,6 +17,7 @@ "html2canvas-objectfit-fix": "^1.2.0", "jspreadsheet-ce": "^4.7.3", "mime-types": "^2.1.33", + "postcss-prefixwrap": "^1.26.0", "prettier-eslint": "^13.0.0", "prettier-eslint-cli": "^5.0.1", "react": "^17.0.2", @@ -24,7 +25,6 @@ "react-cropper": "^2.1.8", "react-dom": "^17.0.2", "react-json-tree": "^0.15.0", - "react-plotly.js": "^2.5.1", "react-scripts": "4.0.3", "react-webcam": "^5.2.3", "recorder-js": "^1.0.7", @@ -36,7 +36,7 @@ "scripts": { "start": "cross-env REACT_APP_BACKEND_URL='http://localhost:7860/' craco start", "format": "prettier-eslint --write '**/*.js*'", - "build": "cross-env REACT_APP_BACKEND_URL='' GENERATE_SOURCEMAP=false craco build", + "build": "cross-env REACT_APP_BACKEND_URL='' REACT_APP_VERSION=$(cat ../gradio/version.txt) GENERATE_SOURCEMAP=false craco build", "eject": "react-scripts eject" }, "eslintConfig": { diff --git a/frontend/public/index.html b/frontend/public/index.html index 3cc0724663..6386066066 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -24,10 +24,11 @@ } gtag('js', new Date()); gtag('config', 'UA-156449732-1'); + window.gradio_mode = "app"; + window.resourceBasePath = "/" try { window.gradio_config = {{ config|tojson }}; } catch (e) { - window.gradio_config = {"mode": "dev"}; } diff --git a/frontend/src/gradio.jsx b/frontend/src/gradio.jsx index dba29656f3..9a60dfd60c 100644 --- a/frontend/src/gradio.jsx +++ b/frontend/src/gradio.jsx @@ -5,8 +5,7 @@ import { saveAs } from "./utils"; import ReactDOM from "react-dom"; import classNames from "classnames"; -import logo_loading from "./static/img/logo_loading.jpg"; -import logo_error from "./static/img/logo_error.png"; +import logo_error from "./static/img/logo_error.svg"; import logo from "./static/img/logo.svg"; import api_logo from "./static/img/api-logo.svg"; import("./themes/defaults.scss"); @@ -305,23 +304,23 @@ export class GradioInterface extends React.Component { expected_duration *= this.state.initial_queue_index + 2; } status = ( -
+
{this.state.queue_index !== null && this.state.queue_index >= 0 ? "queued @ " + this.state.queue_index : false} - loading + loading
); } else if (this.state.error) { status = ( -
- error +
+ error
); } else if (this.state.complete && this.state.last_duration !== null) { status = ( -
+
{this.state.last_duration.toFixed(2) + "s"}
); @@ -379,7 +378,7 @@ export class GradioInterface extends React.Component { >
{status} diff --git a/frontend/src/index.jsx b/frontend/src/index.jsx index 652f7c6a9e..4158942976 100644 --- a/frontend/src/index.jsx +++ b/frontend/src/index.jsx @@ -1,3 +1,4 @@ +import "./public-path"; import React from "react"; import ReactDOM from "react-dom"; import { GradioPage } from "./gradio"; @@ -59,6 +60,7 @@ let fn = async (api_endpoint, queue, data, action, queue_callback) => { window.launchGradio = (config, element_query, space) => { let target = document.querySelector(element_query); + target.classList.add("gradio_app"); if (config.auth_required) { ReactDOM.render( , target @@ -110,7 +112,7 @@ async function get_config() { return window.gradio_config; } } -if (window.gradio_config) { +if (window.gradio_mode == "app") { get_config().then(config => { launchGradio(config, "#root"); }); diff --git a/frontend/src/public-path.jsx b/frontend/src/public-path.jsx new file mode 100644 index 0000000000..de9b7233c4 --- /dev/null +++ b/frontend/src/public-path.jsx @@ -0,0 +1 @@ +__webpack_public_path__ = window.resourceBasePath || "https://gradio.s3-us-west-2.amazonaws.com/" + process.env.REACT_APP_VERSION + "/" \ No newline at end of file diff --git a/frontend/src/static/img/logo_error.png b/frontend/src/static/img/logo_error.png deleted file mode 100644 index fb328d544ec18c40d593d8afdde8dd7dd286f62e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6013 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 diff --git a/frontend/src/static/img/logo_error.svg b/frontend/src/static/img/logo_error.svg new file mode 100644 index 0000000000..5662b67552 --- /dev/null +++ b/frontend/src/static/img/logo_error.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + ERROR + + + diff --git a/frontend/src/static/img/logo_loading.jpg b/frontend/src/static/img/logo_loading.jpg deleted file mode 100644 index 9accf1a956ec5edad6776626080d59e6cf83f4d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59848 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

A 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.1.1 Flask-Cors>=3.0.8 -flask-cachebuster Flask-Login +Flask>=1.1.1 +analytics-python +ffmpy +flask-cachebuster +markdown2 +matplotlib +numpy +pandas +paramiko +pillow +pycryptodome +pydub +requests diff --git a/gradio/networking.py b/gradio/networking.py index 36bbef4058..8c46bebe14 100644 --- a/gradio/networking.py +++ b/gradio/networking.py @@ -43,7 +43,7 @@ VERSION_FILE = pkg_resources.resource_filename("gradio", "version.txt") with open(VERSION_FILE) as version_file: GRADIO_STATIC_ROOT = "https://gradio.s3-us-west-2.amazonaws.com/" + \ - version_file.read().strip() + "/static/" + version_file.read() + "/static/" app = Flask(__name__, template_folder=STATIC_TEMPLATE_LIB, diff --git a/gradio/templates/frontend/asset-manifest.json b/gradio/templates/frontend/asset-manifest.json index 7d96e7c1bb..e9b71c683a 100644 --- a/gradio/templates/frontend/asset-manifest.json +++ b/gradio/templates/frontend/asset-manifest.json @@ -1,19 +1,19 @@ { "files": { - "main.css": "/static/css/main.54d5b21c.css", + "main.css": "/static/css/main.bd8d8c8b.css", "main.js": "/static/bundle.js", "index.html": "/index.html", - "static/media/api-logo.93f17adb.svg": "/static/media/api-logo.93f17adb.svg", - "static/media/arrow-left.794a4706.svg": "/static/media/arrow-left.794a4706.svg", - "static/media/arrow-right.5a7d4ada.svg": "/static/media/arrow-right.5a7d4ada.svg", - "static/media/clear.85cf6de8.svg": "/static/media/clear.85cf6de8.svg", - "static/media/edit.c6b7d6f7.svg": "/static/media/edit.c6b7d6f7.svg", - "static/media/logo.36a8f455.svg": "/static/media/logo.36a8f455.svg", - "static/media/logo_loading.e93acd82.jpg": "/static/media/logo_loading.e93acd82.jpg" + "static/media/api-logo.b3893a52.svg": "/static/media/api-logo.b3893a52.svg", + "static/media/arrow-left.e497f657.svg": "/static/media/arrow-left.e497f657.svg", + "static/media/arrow-right.ea6059fd.svg": "/static/media/arrow-right.ea6059fd.svg", + "static/media/clear.33f9b5f3.svg": "/static/media/clear.33f9b5f3.svg", + "static/media/edit.44bd4fe1.svg": "/static/media/edit.44bd4fe1.svg", + "static/media/logo.411acfd1.svg": "/static/media/logo.411acfd1.svg", + "static/media/logo_error.0d6fa515.svg": "/static/media/logo_error.0d6fa515.svg" }, "entrypoints": [ "static/bundle.css", - "static/css/main.54d5b21c.css", + "static/css/main.bd8d8c8b.css", "static/bundle.js" ] } \ No newline at end of file diff --git a/gradio/templates/frontend/index.html b/gradio/templates/frontend/index.html index d1ba6cc841..42daa7a499 100644 --- a/gradio/templates/frontend/index.html +++ b/gradio/templates/frontend/index.html @@ -4,8 +4,9 @@ } gtag('js', new Date()); gtag('config', 'UA-156449732-1'); + window.gradio_mode = "app"; + window.resourceBasePath = "/" try { window.gradio_config = {{ config|tojson }}; } catch (e) { - window.gradio_config = {"mode": "dev"}; - }Gradio

\ No newline at end of file + }Gradio
\ No newline at end of file diff --git a/upload_to_pypi.sh b/upload_to_pypi.sh index 239c7567dd..ee5d2cec3c 100755 --- a/upload_to_pypi.sh +++ b/upload_to_pypi.sh @@ -7,19 +7,14 @@ echo "Current version is $old_version. New version?" read new_version sed -i "s/version='$old_version'/version='$new_version'/g" setup.py -read -p "npm build? " -r -if [[ $REPLY =~ ^[Yy]$ ]] -then - cd frontend - npm run build - cd .. -fi - read -p "frontend updates? " -r if [[ $REPLY =~ ^[Yy]$ ]] then + echo -n $new_version > gradio/version.txt + cd frontend + npm run build + cd .. aws s3 cp gradio/templates/frontend s3://gradio/$new_version/ --recursive - echo $new_version > gradio/version.txt fi rm -r dist/*