From d2c5842a9bc937d1a7f5dc72cfa3a3796fca8ce6 Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Mon, 14 Jun 2021 17:09:44 -0600 Subject: [PATCH 01/16] start release notes --- app/package.json | 2 +- docs/source/release-notes.rst | 31 +++++++++++++++++++++++++++++++ package/desktop/setup.py | 2 +- setup.py | 4 ++-- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/app/package.json b/app/package.json index a5d584c335..a8d72b6b65 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "fiftyone", "productName": "FiftyOne", - "version": "0.13.1", + "version": "0.14.0", "license": "Apache-2.0", "description": "FiftyOne by Voxel51", "main": "./dist/main.js", diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst index 0da6e0facf..1820f3789f 100644 --- a/docs/source/release-notes.rst +++ b/docs/source/release-notes.rst @@ -3,6 +3,37 @@ FiftyOne Release Notes .. default-role:: code +.. _release-notes-v0.10.0: + +FiftyOne 0.10.0 +-------------- +*Released June 15, 2021* + +App +^^^ +- Fixed `Color by value` in the grid and expanded sample view +- Fixed loading datasets and views that contain vector or array data, + e.g. logits +- Fixed loading video datasets in Colab +- Fixed opening the web App on some Windows machines by ensuring the correct + MIME type is set for JavaScript files + +Core +^^^^ + +Utils +^^^^^ +- Fixed :meth:`import_from_labelbox() ` + to use the correct label ID, specifically the "DataRow ID" + +Zoo +^^^ +- Fixed an encoding issue when loading the + :ref:`Open Images V6 ` dataset on some Windows + machinesa + + + .. _release-notes-v0.9.0: FiftyOne 0.9.0 diff --git a/package/desktop/setup.py b/package/desktop/setup.py index 0a1f9ea2c1..28cd287dfa 100644 --- a/package/desktop/setup.py +++ b/package/desktop/setup.py @@ -17,7 +17,7 @@ import shutil -VERSION = "0.13.1" +VERSION = "0.14.0" def get_version(): diff --git a/setup.py b/setup.py index 9a02b2ba37..34d4a06766 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ def finalize_options(self): ] -VERSION = "0.9.3" +VERSION = "0.10.0" def get_version(): @@ -38,7 +38,7 @@ def get_version(): return VERSION -EXTRAS_REQUIREMENTS = {"desktop": ["fiftyone-desktop>=0.13.1,<0.14.0"]} +EXTRAS_REQUIREMENTS = {"desktop": ["fiftyone-desktop>=0.14.0,<0.15.0"]} with open("README.md", "r") as fh: From bb7c01e05fc372e31ae24cb7a0cca0320ac717f6 Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Mon, 14 Jun 2021 21:52:45 -0600 Subject: [PATCH 02/16] update app form --- app/src/components/Header.tsx | 167 ++++++++++++++++------------------ app/src/recoil/atoms.ts | 12 +-- app/src/recoil/selectors.ts | 24 ++--- 3 files changed, 96 insertions(+), 107 deletions(-) diff --git a/app/src/components/Header.tsx b/app/src/components/Header.tsx index f683e8504d..3135df307c 100644 --- a/app/src/components/Header.tsx +++ b/app/src/components/Header.tsx @@ -14,7 +14,7 @@ import { useMachine } from "@xstate/react"; import uuid from "uuid-v4"; import { animated, useSpring } from "react-spring"; import { ThemeContext } from "styled-components"; -import { Close } from "@material-ui/icons"; +import { Close, Group } from "@material-ui/icons"; import { GitHub, MenuBook } from "@material-ui/icons"; import { BestMatchDiv } from "./ViewBar/ViewStage/BestMatch"; @@ -335,20 +335,21 @@ const Input = styled.input` } `; -const TshirtForm = () => { +const TeamsForm = () => { const [formState, setFormState] = useState({ email: "", + firstname: "", + lastname: "", + company: "", + role: "", discover: "", - helping: "", - improve: "", - tshirt: false, }); const [submitText, setSubmitText] = useState("Submit"); - const [submitted, setSubmitted] = useRecoilState(atoms.feedbackSubmitted); + const [submitted, setSubmitted] = useRecoilState(atoms.teamsSubmitted); const portalId = 4972700; - const formId = "b56682f6-c297-4cea-95c4-9e05a00528af"; + const formId = "87aa5367-a8f1-4ed4-9e23-1fdf8448d807"; const postUrl = `https://api.hsforms.com/submissions/v3/integration/submit/${portalId}/${formId}`; - const closeFeedback = useRecoilValue(atoms.closeFeedback); + const closeTeams = useRecoilValue(atoms.closeTeams); const theme = useTheme(); const setFormValue = (name) => (e) => @@ -359,9 +360,8 @@ const TshirtForm = () => { const disabled = !( formState.email?.length && - formState.helping?.length && - formState.improve?.length && - formState.discover?.length + formState.firstname?.length && + formState.lastname?.length ) || submitted.submitted; const submit = () => { if (disabled) { @@ -373,8 +373,8 @@ const TshirtForm = () => { const finalize = () => { setSubmitText("Submitted. Thank you!"); setSubmitted({ ...submitted, submitted: true }); - fetch(`${http}/feedback?submitted=true`, { method: "post" }); - setTimeout(() => closeFeedback && closeFeedback.close(), 2000); + fetch(`${http}/teams?submitted=true`, { method: "post" }); + setTimeout(() => closeTeams && closeTeams.close(), 2000); }; fetch(postUrl, { @@ -385,28 +385,28 @@ const TshirtForm = () => { submittedAt: Date.now(), fields: [ { - name: "email", - value: formState.email, + name: "firstname", + value: formState.firstname, }, { - name: "is_fiftyone_helping_your_work_how_so_", - value: formState.helping, + name: "lastname", + value: formState.lastname, }, { - name: "how_could_we_improve_fiftyone_", - value: formState.improve, + name: "email", + value: formState.email, }, { - name: "app_how_did_you_hear_about_us", - value: formState.discover, + name: "company", + value: formState.company, }, { - name: "zoom_call_and_t_shirt", - value: formState.tshirt, + name: "role", + value: formState.role, }, { - name: "app_context", - value: appContext, + name: "app_how_did_you_hear_about_us", + value: formState.discover, }, ], context: { pageName: "FiftyOne App" }, @@ -427,6 +427,20 @@ const TshirtForm = () => { }; return ( <> + + { onChange={setFormValue("email")} /> -
- - setFormState({ ...formState, tshirt: !formState.tshirt }) - } - style={{ - color: theme.brand, - paddingLeft: 0, - paddingTop: 0, - }} - /> -

- I'm open to a Zoom call and a free t-shirt! -

-
- ) : showFeedbackButton === "minimized" ? ( - + ) : showTeamsButton === "minimized" ? ( + ) : null; }; @@ -684,7 +673,7 @@ const Header = ({ addNotification }) => { - + ({ default: 1, }); -export const appFeedbackIsOpen = atom({ - key: "appFeedbackIsOpen", +export const appTeamsIsOpen = atom({ + key: "appTeamsIsOpen", default: false, }); diff --git a/app/src/recoil/selectors.ts b/app/src/recoil/selectors.ts index 5cdd6184dc..23e9bb4d42 100644 --- a/app/src/recoil/selectors.ts +++ b/app/src/recoil/selectors.ts @@ -53,24 +53,24 @@ export const fiftyone = selector({ }, }); -export const showFeedbackButton = selector({ - key: "showFeedbackButton", +export const showTeamsButton = selector({ + key: "showTeamsButton", get: ({ get }) => { - const feedback = get(fiftyone).feedback; - const localFeedback = get(atoms.feedbackSubmitted); - const storedFeedback = window.localStorage.getItem("fiftyone-feedback"); - if (storedFeedback) { - window.localStorage.removeItem("fiftyone-feedback"); - fetch(`${http}/feedback?submitted=true`, { method: "post" }); + const teams = get(fiftyone).teams; + const localTeams = get(atoms.teamsSubmitted); + const storedTeams = window.localStorage.getItem("fiftyone-teams"); + if (storedTeams) { + window.localStorage.removeItem("fiftyone-teams"); + fetch(`${http}/teams?submitted=true`, { method: "post" }); } if ( - feedback.submitted || - localFeedback.submitted || - storedFeedback === "submitted" + teams.submitted || + localTeams.submitted || + storedTeams === "submitted" ) { return "hidden"; } - if (feedback.minimized || localFeedback.minimized) { + if (teams.minimized || localTeams.minimized) { return "minimized"; } return "shown"; From eb4e9652a015712fd69e7958bd0e5d4ee973b6db Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Mon, 14 Jun 2021 21:58:08 -0600 Subject: [PATCH 03/16] teams form work --- app/src/recoil/selectors.ts | 2 - docs/source/_static/css/custom.css | 2 +- docs/source/_static/css/voxel51-website.css | 41 ++++ docs/source/_templates/layout.html | 244 +++++++++++++------- fiftyone/constants.py | 2 +- fiftyone/server/main.py | 14 +- 6 files changed, 209 insertions(+), 96 deletions(-) diff --git a/app/src/recoil/selectors.ts b/app/src/recoil/selectors.ts index 23e9bb4d42..bae8e759af 100644 --- a/app/src/recoil/selectors.ts +++ b/app/src/recoil/selectors.ts @@ -8,8 +8,6 @@ import { VALID_LABEL_TYPES, VALID_SCALAR_TYPES, makeLabelNameGroups, - labelTypeHasColor, - AGGS, VALID_LIST_TYPES, HIDDEN_LABEL_ATTRS, LABEL_LIST, diff --git a/docs/source/_static/css/custom.css b/docs/source/_static/css/custom.css index b314d1495a..03c2afa1e2 100644 --- a/docs/source/_static/css/custom.css +++ b/docs/source/_static/css/custom.css @@ -321,7 +321,7 @@ article.pytorch-article .reference.download.internal { } .nav__main__logo { - width: 300px; + width: 260px; margin-left: 30px; margin-right: 20px; } diff --git a/docs/source/_static/css/voxel51-website.css b/docs/source/_static/css/voxel51-website.css index 2f16ae8fc0..eec7470e51 100644 --- a/docs/source/_static/css/voxel51-website.css +++ b/docs/source/_static/css/voxel51-website.css @@ -484,3 +484,44 @@ .list-inline > li:not(:last-child) { padding-right: 2rem; } + +.button-primary { + background: var(--color-primary); + color: var(--text-primary-on-dark) !important; + border-color: var(--color-primary); + border-radius: 3px; + border-width: 2px; + border-style: solid; + cursor: pointer; + + font-weight: 600; + font-size: 14px; + + padding: 0.4rem 1.2em; +} + +.button-primary:hover { + background: var(--color-primary-muted); + border-color: var(--color-primary-muted); + text-decoration: none; +} + +.button-secondary { + color: var(--color-primary) !important; + border-color: var(--color-primary); + border-radius: 3px; + border-width: 2px; /* XXX ask */ + border-style: solid; + cursor: pointer; + padding: 0.4em 1.4em; + font-size: 14px; + + font-weight: 600; /* XXX ask */ +} + +.button-secondary:hover { + background: var(--color-primary); + border-color: var(--color-primary); + color: var(--text-primary-on-dark) !important; + text-decoration: none; +} diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html index 6a022c7c0d..7413b980af 100644 --- a/docs/source/_templates/layout.html +++ b/docs/source/_templates/layout.html @@ -1,11 +1,13 @@ -{% extends "!layout.html" %} - -{% block extrahead %} - - -{% endblock %} - -{% block custom_header %} +{% extends "!layout.html" %} {% block extrahead %} + + +{% endblock %} {% block custom_header %}
+ + + + +
-{% endblock %} - -{% block custom_mobile_menu %} -{# delete PyTorch's menu because our own is reused on mobile #} -{% endblock %} - -{% block menu %} -{{ toctree(maxdepth=10, collapse=True, includehidden=True, titles_only=True) }} -{% endblock %} - -{% block custom_footer %} +{% endblock %} {% block custom_mobile_menu %} {# delete PyTorch's menu because +our own is reused on mobile #} {% endblock %} {% block menu %} {{ +toctree(maxdepth=10, collapse=True, includehidden=True, titles_only=True) }} {% +endblock %} {% block custom_footer %} - - @@ -199,6 +205,11 @@

gtag("config", "UA-141773487-1"); +