mirror of
https://github.com/gradio-app/gradio.git
synced 2025-01-06 10:25:17 +08:00
e9aa9eec37
* Add min max handling for Number (#3871) * feat: add min max handling for Number * Update CHANGELOG.md * fix: Error when min or max is not specified * fix formatting * fix: error when nothing is specified * Just put infinity in min and max --------- Co-authored-by: Dawood Khan <dawoodkhan82@gmail.com> * number limit * Update gradio/components.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * New Version Docs (#4027) * [create-pull-request] automated change * Trigger Build --------- Co-authored-by: aliabd <aliabd@users.noreply.github.com> Co-authored-by: aliabd <ali.si3luwa@gmail.com> * Safer `HuggingFaceDatasetSaver` (and deprecate `HuggingFaceDatasetJsonSaver`) (#3973) * Draft for a safer HuggingFaceDatasetSaver * Rename (and replace) gr.SaferHuggingFaceDatasetSaver as gr.HuggingFaceDatasetSaver * update changelog * ruff * doc * tmp work * merge 2 classes * remove useless code * adapt tests * Update gradio/flagging.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Update CHANGELOG.md * fix typing * code formatting * removed print from tests * removing imports * removing imports * fix paths * formatting * wording * formating * fix tests --------- Co-authored-by: testbot <lucainp@hf.co> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * merge * Allow state to be rendered multiple times (#4030) * state render * add test * formatting * changelog * Allow decoding b64 string without header in processing utils (#4031) * allow decoding b64 string without headers * install gradio-client in edittable mode * update GH actions * add test for decoding headerless b64 * add test for decoding headerless b64 image * some linting * fix test --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Sets matplotlib backend to agg before rendering math (#4029) * matplotlib-agg * fix * context manager * Update CHANGELOG.md * update demos * linting * removed warning * fix test * fixes * fix tests * Upgrade pyright to 1.1.305 (#4042) * Fastapi Python Client Guide (#3892) * fastapi guide * changelog * writing * finish guide * fix * Update guides/06_client-libraries/fastapi-app-with-the-gradio-client.md Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> * Update guides/06_client-libraries/fastapi-app-with-the-gradio-client.md Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> * Update guides/06_client-libraries/fastapi-app-with-the-gradio-client.md Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> * Update guides/06_client-libraries/fastapi-app-with-the-gradio-client.md Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> * dependencies * html --------- Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> * fix overflowing gutter and dark mode base color (#4051) * Add ability to blocklist filepaths, ability to specify where gradio temp files are created (#4047) * temporary file * tests * formatting * rename * added another test * guide * formatting * changelog * added custom gradio temp directory (#4053) * added custom gradio temp directory * Update 03_sharing-your-app.md * rename test * address review * remove print * Chatbot code syntax highlighting (#4048) * first pass * fixes * more fixes * remove breaks * format * version * pr fixes * changelog * test fix * background color * format * revert test fix * changes * changes * test * changes * changes * changes * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Ali Abid <aabid94@gmail.com> * Fixes issue with indentation in code field with streaming (#4043) * indent fix * fix * changelog * fix overflowing gutter and dark mode base color (#4051) * Add ability to blocklist filepaths, ability to specify where gradio temp files are created (#4047) * temporary file * tests * formatting * rename * added another test * guide * formatting * changelog * added custom gradio temp directory (#4053) * added custom gradio temp directory * Update 03_sharing-your-app.md * rename test * address review * remove print * Chatbot code syntax highlighting (#4048) * first pass * fixes * more fixes * remove breaks * format * version * pr fixes * changelog * test fix * background color * format * revert test fix * changes * changes * test * changes * changes * changes * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Ali Abid <aabid94@gmail.com> * fix * fix test --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: pngwn <hello@pngwn.io> Co-authored-by: Ali Abid <aabid94@gmail.com> * [create-pull-request] automated change (#4059) Co-authored-by: aliabid94 <aliabid94@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * changelog (#4064) * New Version Docs (#4069) * [create-pull-request] automated change * Trigger Build --------- Co-authored-by: aliabd <aliabd@users.noreply.github.com> Co-authored-by: aliabd <ali.si3luwa@gmail.com> * Soft theme fix (#4070) * fix * fix --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Empty gallery fix (#4072) * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix bug where functions with type hints caused errors (#4068) * Fix + test * CHANGELOG * Update test/test_utils.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Update gradio/utils.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * More Ruff rules (#4038) * Bump ruff to 0.0.264 * Enable Ruff Naming rules and fix most errors * Move `clean_html` to utils (to fix an N lint error) * Changelog * Clean up possibly leaking file handles * Enable and autofix Ruff SIM * Fix remaining Ruff SIMs * Enable and autofix Ruff UP issues * Fix misordered import from #4048 * Fix bare except from #4048 --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * [WIP] Language Agnostic Typing in `/info` route (#4039) * First commit * All serializers * Remove output type * Add route * Format json * Modify dropdown and slider choices * Fix impl * Lint * Add tests * Fix lint * remove breakpoint * Tests passing locally * Format code * Address comments * Use union + fix tests * handle multiple file case * Add serializer to info payload * lint * Add to CHANGELOG * grc version * requirements * fix test --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Keep hidden Accordion content in DOM (#4073) * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Theme builder fixes (#4080) * theme-builder-fixes * theme-builder-fixes * fix expand issue * changes * Update gradio/themes/builder_app.py * changelog --------- Co-authored-by: Ali Abid <aabid94@gmail.com> * Misc file and docs fixes (#4086) * uvicorn version * uvicorn version * changes * guides * guide * changelog * typo * typo * Update guides/04_integrating-other-frameworks/01_using-hugging-face-integrations.md * chinese lang * rename * Update guides/04_integrating-other-frameworks/01_using-hugging-face-integrations.md * Update guides/03_building-with-blocks/04_custom-CSS-and-JS.md Co-authored-by: aliabid94 <aabid94@gmail.com> * address review * simplify section --------- Co-authored-by: aliabid94 <aabid94@gmail.com> * Removing "State" from view API info (#4107) * wip pr * update client version * update space fetcher * changelog, workflow * fix not flaky tests * lint * v2 * Dont send request to `/info` if version before 3.28.3 (#4109) * Add code * Lint * CHANGELOG --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Upload audio ios (#4071) * changes * changes * change * changes * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Allow textbox / number submits to trigger Interface submit (#4090) * changes * changes * changes * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix slider released event not triggering when released on mobile (#4098) * Fix slider released event not triggering when released on mobile * Update CHANGELOG * fix range test * retrigger --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix then logic to work after failures (#4115) * change * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fixes to view API page (#4112) * logo * fix for new info and logo path * changelog * remove example_input from returns --------- Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> * Add support for async generators (#3821) * Add impl + unit test * CHANGELOG * Lint * Type check * Remove print * Fix tests * revert change * Lint * formatting * Fix test * Lint --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Ali Abid <aabid94@gmail.com> * release (#4116) * Bumpt client version (#4125) * New Version Docs (#4131) * [create-pull-request] automated change * Trigger Build --------- Co-authored-by: aliabd <aliabd@users.noreply.github.com> Co-authored-by: aliabd <ali.si3luwa@gmail.com> * Fix create version docs action (#4130) * define version instead of upgrading * add sleep --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix dev docs (#4132) * Move .config/README.md to js/README.md * Link js/README.md from CONTRIBUTING.md * Update CHANGELOG.md --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * changelog (#4136) * Fix website build issue (#4142) * upgrade pnpm * changelgo * Fix python client test (#4138) * Fix python client test * CHANGELOG --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix isssue with running with nginx (#4133) * nginx-root * fix * ability to set root path * removed root * removed root * fix * changelog * Update gradio/routes.py Co-authored-by: aliabid94 <aabid94@gmail.com> * Update gradio/routes.py Co-authored-by: aliabid94 <aabid94@gmail.com> --------- Co-authored-by: aliabid94 <aabid94@gmail.com> * Record username when flagging (#4135) * record username * fix * changelog fix * format * fix hf saver * fix deserialization * fixes * Fix api info for File component (#4153) * Fix output file type info * Fix example inputs * CHANGELOG * Update client * Add test * Bump version * Bump min client version * Update .prettierignore adding client/js/dist and .venv (#4160) * Fix the prettier.ignorePath field in the VSCode workspace settings (#4164) Co-authored-by: pngwn <hello@pngwn.io> * simplify format of changelog (#4163) * Fix the wildcard in .editorconfig to match files in nested directories (#4165) * Fix the wildcard in .editorconfig to match files in nested directories * Remove a wrong whitespace in a brace expansion notation in .editorconfig --------- Co-authored-by: pngwn <hello@pngwn.io> * Fix flaky interface test (#4168) * Fix test * Lint * Fix vs code lint * Adds missing components to gradio client serializing's component mapping (#4167) * add missing serialization * format * update release note format * update release note format * fix test * Release 3.30 (#4166) * release * requirements * [Docs] Resolve numerous typos (#4170) * Resolve numerous typos * Delete test.py * Run generate_notebooks * notebooks --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * New Version Docs (#4172) * [create-pull-request] automated change * Update v3.30.0_template.html --------- Co-authored-by: abidlabs <abidlabs@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Dispatch dropdown change on value change for any reason (#4128) * changes * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * hotfix for test (#4173) * hotfix for test * removed comment * 3712 js client (#3899) * update ci (#4184) * bump client version (#4185) * bump client version * ignore spaces-test * Fix (#4186) * bump client version * ignore spaces-test * fix * update token for npm action (#4187) * change (#4189) * ci typo (#4190) * Fix npm publish again again (#4191) * ci typo * fix * Fix npm publish again again (#4192) * ci typo * fix * again * Fix npm publish again again (#4193) * ci typo * fix * again * again * Add format argument to Audio (#4178) * experimental * Add test * Rename to format * Rename * CHANGELOG * Add to docstring * Update gradio/components.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * chore: update versions (#4188) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Fix npm publish again again (#4195) * ci typo * fix * again * again * again * client docs tweaks (#4196) * ci typo * fix * again * again * again * ignore workbench * small tweaks for publish + docs * Fix "TypeError: issubclass() arg 1 must be a class" When Optional args (#4200) * fix "issubclass() arg 1 must be a class" when args is Optional * Update CHANGELOG.md add fix "TypeError: issubclass() arg 1 must be a class" when use Optional args * Update gradio/helpers.py Co-authored-by: Aarni Koskela <akx@iki.fi> * changelog * formatting --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Aarni Koskela <akx@iki.fi> * Fix semiver import (#4201) * fix token (#4208) * fix token * add label * Fix Explanation Regarding NumPy Image Component (#4204) * 20230513 swap np height and width in docs * changelog --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Correct stacklevel for check_deprecated_parameters (#4203) Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Programmatically launch reload to allow factories and arguments to be passed to the app (#4119) * Programmatically lauch reload to allow factories and arguments to be passed to the app * add warning * modify warning * guide fixes * formatting * changes * warning * import fix * fix tests * fix tests --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Update CONTRIBUTING.md (#4220) * Input listener (#4157) * changes * changes * changes * changes * changes * changes * changes * chnages * fix * changes * changes * merge * changes * restore --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Do not do any analytics requests if analytics are disabled (#4194) * Move analytics-related bits to gradio.analytics * Do not do any analytics requests if analytics are disabled * Remove unused log_feature_analytics * removed redundant analytics, rewrote * renamed * save * fixed test' --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Increase websocket messaging timeout (#4235) * increase websocket timeout * changelog * Fix for `typing.get_type_hints()` on Python 3.9 or lower (#4228) * fix * fix docstring * type hint fix * fix test * Update gradio/utils.py Co-authored-by: Aarni Koskela <akx@iki.fi> * fix indentation --------- Co-authored-by: Aarni Koskela <akx@iki.fi> * Some tweaks to the Client (#4230) * parameter names * tweaks * separate out serialize * fix * changelog * fix * fix * improve test * Only allow messaging update if analytics is enabled (#4236) * Only allow messaging update if analytics are allowed Follows up on #4194 * Remove duplicate changelog entry * remove circular import --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix client filepaths (#4202) * transform returned paths to useful URLs * changeset * update app * revert * revert * changelog * Update client/js/src/client.ts Co-authored-by: aliabid94 <aabid94@gmail.com> * format --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: aliabid94 <aabid94@gmail.com> * fix cancels (#4225) * fix cancels * changelog * refactor to make it work * chore: update versions (#4207) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Fix publish (#4240) * fix npm publish * fix npm publish * release (#4219) Co-authored-by: pngwn <hello@pngwn.io> * Fixes chatbot_dialogpt demo (#4238) * demo fix * changelog * fix * demo --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix JSONDecodeError (#4241) * Fix JSONDecodeError bug (#4237) * Remove unused import * Clean up code * Fix JSONDecodeError (#4241) * Accept all Exceptions --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * make workbench private (#4247) * Refactoring (#4223) * Replace var with const in js/app/src/main.ts * Remove unnecessary nullish coalescing in js/app/src/main.ts * Remove unnecessary white spaces in the NPM scripts in js/app/package.json * Use object key-value shorthand * changelog --------- Co-authored-by: pngwn <hello@pngwn.io> * Move mount_css() from main.ts to css.ts (#4222) * Move mount_css() from main.ts to css.ts because these is a circular dependency between main.ts and Index.svelte (and it will help the development of the Wasm ver in the future) * changelog --------- Co-authored-by: pngwn <hello@pngwn.io> * [create-pull-request] automated change (#4250) Co-authored-by: aliabd <aliabd@users.noreply.github.com> * Fix run on click (#4258) * fix run on click * changelog * Upgrade black to 23.3 (#4259) * Upgrade black * Conservatively upgrade packaging too since it's black's dependency * Using marked for chatbot markdown parsing (#4150) * fix info request in js client (#4271) * fix info request in js client * changelog * Temp file fixes (#4256) * Fix bug * Linting * CHANGELOG * Add tests * Update test * Fix remaining components + add tests * Fix tests * Fix tests * Address comments * Ensure error modal display as expected when using the queue (#4273) * Allow passing FastAPI app options (#4282) * App: don't force docs_url and redoc_url to None * App.create_app: allow passing in app_kwargs * start_server + launch: allow passing in app_kwargs * Changelog * Apply suggestions from code review Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Use .launch for tests --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Katex support in chatbot (#4285) * katex * katex support * changelog * fixes * pr fixes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Release 3.32.0 (#4293) * release 3.32.0 * changelog * New Version Docs (#4296) * [create-pull-request] automated change * Update v3.32.0_template.html --------- Co-authored-by: abidlabs <abidlabs@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Add overridden type annotations on `normalise_file()` to remove @ts-i… (#4315) * Add overridden type annotations on `normalise_file()` to remove @ts-ignore, and remove its unnecessary export * changeset --------- Co-authored-by: pngwn <hello@pngwn.io> * typo (minor): extra newline puts the documentation of colums to grid (#4337) * typo (minor): extra newline puts the documentation of colums to grid * edited changelog * changelog --------- Co-authored-by: thiswillbeyourgithub <github@32mail.33mail.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * return a Dependency instance from Blocks.load event listener (#4304) * return a Dependency instance from Blocks.load event listener * a test case for chaining then from load event * update CHANGELOG * add test for load.then with blocks re-used * fixes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix typo in client/js/README.md (#4310) Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * chore: update versions (#4283) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * Optimize frontend's is_dep calls (#4334) * Optimize is_dep (36 to 12 msec) * Call is_dep less (12 msec to 9 msec) * Changelog --------- Co-authored-by: pngwn <hello@pngwn.io> * various client refactors + tweaks (#4357) * changeset * Add a type annotation on the `api` variable to which the return value of `view_config()` is assigned, and update the type annotation and exception handling on `view_config` as well (#4311) * Remove unnecessary @ts-ignore (#4314) * Remove unnecessary Promise wrapping another promise (#4313) * Remove unnecessary Promise wrapping another promise * Remove an error handeler that may remove detailed error stacks * changeset * remove changeset --------- Co-authored-by: pngwn <hello@pngwn.io> * Stop using `let` for unchanged variables in `client.ts` (#4312) * Stop using `let` for unchanged variables in `client.ts` * fixes --------- Co-authored-by: pngwn <hello@pngwn.io> --------- Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com> * Remove a bunch of unused frontend code (#4275) Co-authored-by: pngwn <hello@pngwn.io> * Respect `interactive=True` in output of `gr.Interface` (#4356) * tests * changelog * lint * Update gradio/interface.py Co-authored-by: Aarni Koskela <akx@iki.fi> * format --------- Co-authored-by: Aarni Koskela <akx@iki.fi> * Don't allow dotfiles for /file= route (#4303) * Don't allow dotfiles or files in "dot directories" for /file= * update guide --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Push to spaces (#4033) * changes * first commit * Update gradio/upload.py Co-authored-by: Aarni Koskela <akx@iki.fi> * Update gradio/upload.py Co-authored-by: Aarni Koskela <akx@iki.fi> * changes * changes * changes * changes * changes * changes * changes * chnages * changes * changes * changes * changes * Update 03_sharing-your-app.md * changes * changes * change * changes * changes * changes * Update gradio/deploy_space.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * changes * changes * changes --------- Co-authored-by: Aarni Koskela <akx@iki.fi> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Do not send HF token to other domains via `/proxy` (#4368) * test * fix * changelog * fix, add warnings * Make chatbot input fields non-interactive while bot is streaming (#4363) * Add demo impl * trigger then if generating * remove unused value * CHANGELOG * Fix code * Update guide * Update guides/07_other-tutorials/creating-a-chatbot.md Co-authored-by: pngwn <hello@pngwn.io> --------- Co-authored-by: pngwn <hello@pngwn.io> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Prevent path traversal in `/file` routes (#4370) * add tests * add tests * file route fix * update tests * formatting * file access * cleanup * cleaning * fix tests * Favicon fix for Windows (#4369) * favicon fix * changelog * svg * remove favicon * actual fix * Add pypi classifiers to pyproject.toml (#4383) * Add pypi classifiers to pyproject.toml * Add OS classifier --------- Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com> * Use DOMPurify to sanitize html in chatbot (#4360) * dompurify * changelog * format * clean * changelog * Update run.py * update happy-dom --------- Co-authored-by: pngwn <hello@pngwn.io> * fix copy button invalid & copy button (invisible) duplication bug in chatbot (#4350) * fix a copy button duplication bug in chatbot * fix copy button invalid issue * Update CHANGELOG.md: Fixed Copy Button * fix changelog typo * switch to static HTML + event delegation for copy button * fix * format + notebooks * format + notebooks --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: pngwn <hello@pngwn.io> * release 3.33.0 (#4392) Co-authored-by: aliabid94 <aabid94@gmail.com> * Restore offline support (#4398) * changes * changes * changes * New Version Docs (#4397) * [create-pull-request] automated change * Update temporary_template.html --------- Co-authored-by: abidlabs <abidlabs@users.noreply.github.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix Base parent in Docs, add Group (#4391) * fix base parent * add group to docs --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Remove old versioned docs and fix repo classification (#4362) * remove old versioned docs * delete versioned docs when new one is created * ignore website dir in linguist calc * upload and download versioned docs * modify github action * remove gitattributes file --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Update message when share link binary is blocked (#4380) * update share link message * address suggestion * changelog * fix * formatting * Update utils.py for validate_url (#4388) * Update utils.py for validate_url AWS s3 presigned url cannot work for both HEAD and GET. So when HEAD the presigned url, it will return 403(Forbidden) * Update gradio/utils.py * changelog --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * v3.33.1 + Guide on setting up Gradio behind nginx... (#4379) * nginx guide * delete 3.33.0 * version * unindent * Prevent label change event from triggering itself (#4371) * Fix the Node and pnpm setup actions (#4394) * Run `pnpm i` with pnpm@8.6.0 to re-generate the lock file (#4393) * fix indent (#4404) * Throttle scroll event (#4158) * Throttle scroll event This decreases the amount of function calls when scrolling through the documentation website. * fix themes base --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: Ali Abdalla <ali.si3luwa@gmail.com> * merge * fixes * changes * more changes * notebook * changelog * error handle backend * Update gradio/components.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Update gradio/components.py Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Adds `variant` and `interactive` props to `gr.UploadButton` (#4436) * upload button * fix index * changelog * formatting * cleanup * fix get_continuous_fn bug when having every (#4434) * fix the bug for wrap continuous func with parameter every while origin func return generator * Update utils.py * Update CHANGELOG.md * Update test_utils.py * Update CHANGELOG.md * formatting --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * Fix Safari video playback (#4433) * changes * changes --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * test fix * test * tests * fix ui test * format * Increase version gradio-client version/changelog (#4441) * Increase version gradio-client version/changelog * req --------- Co-authored-by: Abubakar Abid <abubakar@huggingface.co> * fixes * notebook * fixed tests finally * format * python test fix * test fix * remove style from test * Update CHANGELOG.md * theme test fix --------- Co-authored-by: Artemy Egorov <artegoser@gmail.com> Co-authored-by: Abubakar Abid <abubakar@huggingface.co> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: aliabd <aliabd@users.noreply.github.com> Co-authored-by: aliabd <ali.si3luwa@gmail.com> Co-authored-by: Lucain <lucainp@gmail.com> Co-authored-by: testbot <lucainp@hf.co> Co-authored-by: 1lint <105617163+1lint@users.noreply.github.com> Co-authored-by: Aarni Koskela <akx@iki.fi> Co-authored-by: pngwn <hello@pngwn.io> Co-authored-by: Ali Abid <aabid94@gmail.com> Co-authored-by: aliabid94 <aliabid94@users.noreply.github.com> Co-authored-by: Freddy Boulton <alfonsoboulton@gmail.com> Co-authored-by: space-nuko <24979496+space-nuko@users.noreply.github.com> Co-authored-by: Yuichiro Tachibana (Tsuchiya) <t.yic.yt@gmail.com> Co-authored-by: Tom Aarsen <37621491+tomaarsen@users.noreply.github.com> Co-authored-by: abidlabs <abidlabs@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: LingFeng.Chen.Cn <lingfeng.chen.cn@gmail.com> Co-authored-by: Der Chien <b03902015@ntu.edu.tw> Co-authored-by: Micky Brunetti <micky2be@users.noreply.github.com> Co-authored-by: David Ai <davidai2018@gmail.com> Co-authored-by: thiswillbeyourgithub <26625900+thiswillbeyourgithub@users.noreply.github.com> Co-authored-by: thiswillbeyourgithub <github@32mail.33mail.com> Co-authored-by: Paul Garner <ego@anentropic.com> Co-authored-by: WilliamRoyNelson <william.roy.nelson@gmail.com> Co-authored-by: binary-husky <96192199+binary-husky@users.noreply.github.com> Co-authored-by: Yan <alvindaiyan@gmail.com> Co-authored-by: Shavit <shavit@users.noreply.github.com> Co-authored-by: dkjshk <xie0510@126.com>
419 lines
13 KiB
Python
419 lines
13 KiB
Python
import tempfile
|
|
from unittest.mock import patch
|
|
|
|
import huggingface_hub
|
|
import pytest
|
|
from huggingface_hub.hf_api import SpaceInfo
|
|
|
|
import gradio as gr
|
|
from gradio.themes.utils import ThemeAsset, get_matching_version, get_theme_assets
|
|
|
|
versions = [
|
|
"0.1.0",
|
|
"0.1.1",
|
|
"0.1.2",
|
|
"0.1.3",
|
|
"0.4.4",
|
|
"0.5.0",
|
|
"0.7.0",
|
|
"0.9.2",
|
|
"0.9.3",
|
|
"0.9.4",
|
|
"0.9.5",
|
|
"0.9.6",
|
|
"0.9.7",
|
|
"0.9.8",
|
|
"2.2.0",
|
|
"2.2.1",
|
|
"2.2.10",
|
|
"2.2.11",
|
|
"2.2.12",
|
|
"2.2.13",
|
|
"2.2.14",
|
|
"2.2.15",
|
|
"2.2.2",
|
|
"2.2.3",
|
|
"2.2.4",
|
|
"2.2.5",
|
|
"2.2.6",
|
|
"2.2.7",
|
|
"2.2.8",
|
|
"3.0.1",
|
|
"3.0.10",
|
|
"3.0.11",
|
|
"3.0.12",
|
|
"3.0.13",
|
|
"3.0.14",
|
|
"3.0.15",
|
|
"3.0.16",
|
|
"3.0.17",
|
|
"3.0.18",
|
|
"3.0.19",
|
|
"3.0.2",
|
|
"3.0.20",
|
|
"3.0.20-dev0",
|
|
"3.0.21",
|
|
"3.0.22",
|
|
"3.0.23",
|
|
"3.0.23-dev1",
|
|
"3.0.24",
|
|
"3.0.25",
|
|
"3.0.26",
|
|
"3.0.3",
|
|
"3.0.4",
|
|
"3.0.5",
|
|
"3.0.6",
|
|
"3.0.7",
|
|
"3.0.8",
|
|
"3.0.9",
|
|
"3.1.0",
|
|
"3.1.1",
|
|
"3.1.2",
|
|
"3.1.3",
|
|
"3.1.4",
|
|
"3.1.5",
|
|
"3.1.6",
|
|
"3.1.7",
|
|
"3.10.0",
|
|
"3.10.1",
|
|
"3.11.0",
|
|
"3.12.0",
|
|
"3.13.0",
|
|
"3.13.1",
|
|
"3.13.2",
|
|
"3.14.0",
|
|
"3.15.0",
|
|
"3.16.0",
|
|
"3.16.1",
|
|
"3.16.2",
|
|
"3.17.0",
|
|
"3.17.1",
|
|
"3.18.0",
|
|
"3.18.1",
|
|
"3.18.1-dev0",
|
|
"3.18.2-dev0",
|
|
"3.18.2",
|
|
"3.19.0",
|
|
"3.19.1",
|
|
"3.20.0",
|
|
"3.20.1",
|
|
"3.3.1",
|
|
"3.4.1",
|
|
"3.8.1",
|
|
"3.8.2",
|
|
"3.9.1",
|
|
]
|
|
|
|
|
|
assets = [ThemeAsset(f"theme_schema@{version}") for version in versions]
|
|
|
|
dracula_gray = gr.themes.colors.Color(
|
|
*(
|
|
["#6272a4", "#7280ad", "#818eb6", "#919cbf", "#a1aac8"][::-1]
|
|
+ ["#586794", "#4e5b83", "#455073", "#3b4462", "#313952", "#272e42"]
|
|
)
|
|
)
|
|
|
|
|
|
dracula_pink = gr.themes.Color(
|
|
*(
|
|
[
|
|
"#ffd7ee",
|
|
"#ff79c6",
|
|
"#ff86cc",
|
|
"#ff94d1",
|
|
"#ffa1d7",
|
|
"#ffafdd",
|
|
"#ffbce3",
|
|
"#ffc9e8",
|
|
][::-1]
|
|
+ ["#e66db2", "#cc619e", "#b3558b"]
|
|
)
|
|
)
|
|
|
|
dracula_gray = gr.themes.colors.Color(
|
|
*(
|
|
["#6272a4", "#7280ad", "#818eb6", "#919cbf", "#a1aac8"][::-1]
|
|
+ ["#586794", "#4e5b83", "#455073", "#3b4462", "#313952", "#272e42"]
|
|
)
|
|
)
|
|
|
|
dracula = gr.themes.Base(
|
|
primary_hue=gr.themes.colors.pink,
|
|
neutral_hue=dracula_gray,
|
|
font=gr.themes.GoogleFont("Poppins"),
|
|
).set(
|
|
body_background_fill=dracula_gray.c500,
|
|
color_accent_soft=dracula_gray.c100,
|
|
background_fill_primary=dracula_gray.c500,
|
|
background_fill_secondary=dracula_gray.c500,
|
|
block_background_fill=dracula_gray.c300,
|
|
body_text_color="#f8f8f2",
|
|
body_text_color_dark="#f8f8f2",
|
|
body_text_color_subdued="#f8f8f2",
|
|
block_label_text_color="#f8f8f2",
|
|
block_label_text_color_dark="#f8f8f2",
|
|
table_even_background_fill=dracula_gray.c300,
|
|
border_color_accent=dracula_gray.c200,
|
|
block_info_text_color="#f8f8f2",
|
|
block_info_text_color_dark="#f8f8f2",
|
|
block_title_text_color="#f8f8f2",
|
|
block_title_text_color_dark="#f8f8f2",
|
|
checkbox_background_color_selected_dark="#ff79c6",
|
|
checkbox_background_color_selected="#ff79c6",
|
|
button_primary_background_fill_dark="#ff79c6",
|
|
button_primary_background_fill=dracula_pink.c300,
|
|
button_secondary_text_color="#f8f8f2",
|
|
slider_color_dark="#ff79c6",
|
|
slider_color=dracula_pink.c300,
|
|
panel_background_fill="#31395294",
|
|
block_background_fill_dark="#31395294",
|
|
)
|
|
dracula.name = "gradio/dracula_test"
|
|
|
|
|
|
class TestSemverMatch:
|
|
def test_simple_equality(self):
|
|
assert get_matching_version(assets, "3.10.0") == ThemeAsset(
|
|
"theme_schema@3.10.0"
|
|
)
|
|
|
|
def test_empty_expression_returns_latest(self):
|
|
assert get_matching_version(assets, None) == ThemeAsset("theme_schema@3.20.1")
|
|
|
|
def test_range(self):
|
|
assert get_matching_version(assets, ">=3.10.0,<3.15") == ThemeAsset(
|
|
"theme_schema@3.14.0"
|
|
)
|
|
|
|
def test_wildcard(self):
|
|
assert get_matching_version(assets, "2.2.*") == ThemeAsset(
|
|
"theme_schema@2.2.15"
|
|
)
|
|
|
|
def test_does_not_exist(self):
|
|
assert get_matching_version(assets, ">4.0.0") is None
|
|
|
|
def test_compatible_release_specifier(self):
|
|
assert get_matching_version(assets, "~=0.0") == ThemeAsset("theme_schema@0.9.8")
|
|
|
|
def test_breaks_ties_against_prerelease(self):
|
|
assert get_matching_version(assets, ">=3.18,<3.19") == ThemeAsset(
|
|
"theme_schema@3.18.2"
|
|
)
|
|
|
|
|
|
class TestGetThemeAssets:
|
|
def test_get_theme_assets(self):
|
|
space_info = huggingface_hub.hf_api.SpaceInfo(
|
|
id="freddyaboulton/dracula",
|
|
siblings=[
|
|
{
|
|
"blob_id": None,
|
|
"lfs": None,
|
|
"rfilename": "themes/theme_schema@0.1.0.json",
|
|
"size": None,
|
|
},
|
|
{
|
|
"blob_id": None,
|
|
"lfs": None,
|
|
"rfilename": "themes/theme_schema@0.1.1.json",
|
|
"size": None,
|
|
},
|
|
{
|
|
"blob_id": None,
|
|
"lfs": None,
|
|
"rfilename": "themes/theme_schema@0.2.5.json",
|
|
"size": None,
|
|
},
|
|
{
|
|
"blob_id": None,
|
|
"lfs": None,
|
|
"rfilename": "themes/theme_schema@1.5.9.json",
|
|
"size": None,
|
|
},
|
|
],
|
|
tags=["gradio-theme", "gradio"],
|
|
)
|
|
|
|
assert get_theme_assets(space_info) == [
|
|
ThemeAsset("themes/theme_schema@0.1.0.json"),
|
|
ThemeAsset("themes/theme_schema@0.1.1.json"),
|
|
ThemeAsset("themes/theme_schema@0.2.5.json"),
|
|
ThemeAsset("themes/theme_schema@1.5.9.json"),
|
|
]
|
|
|
|
assert gr.Theme._theme_version_exists(space_info, "0.1.1")
|
|
assert not gr.Theme._theme_version_exists(space_info, "2.0.0")
|
|
|
|
def test_raises_if_space_not_properly_tagged(self):
|
|
space_info = huggingface_hub.hf_api.SpaceInfo(
|
|
id="freddyaboulton/dracula", tags=["gradio"]
|
|
)
|
|
|
|
with pytest.raises(
|
|
ValueError,
|
|
match="freddyaboulton/dracula is not a valid gradio-theme space!",
|
|
):
|
|
with patch("huggingface_hub.HfApi.space_info", return_value=space_info):
|
|
get_theme_assets(space_info)
|
|
|
|
|
|
class TestBuiltInThemes:
|
|
@pytest.mark.parametrize(
|
|
"theme, name",
|
|
[
|
|
(gr.themes.Base(), "base"),
|
|
(gr.themes.Glass(), "glass"),
|
|
(gr.themes.Monochrome(), "monochrome"),
|
|
(gr.themes.Soft(), "soft"),
|
|
(gr.themes.Default(), "default"),
|
|
],
|
|
)
|
|
def test_theme_name(self, theme, name):
|
|
assert theme.name == name
|
|
|
|
|
|
class TestThemeUploadDownload:
|
|
@patch("gradio.themes.base.get_theme_assets", return_value=assets)
|
|
def test_get_next_version(self, mock):
|
|
next_version = gr.themes.Base._get_next_version(
|
|
SpaceInfo(id="gradio/dracula_test")
|
|
)
|
|
assert next_version == "3.20.2"
|
|
|
|
@pytest.mark.flaky
|
|
def test_theme_download(self):
|
|
assert (
|
|
gr.themes.Base.from_hub("gradio/dracula_test@0.0.2").to_dict()
|
|
== dracula.to_dict()
|
|
)
|
|
|
|
with gr.Blocks(theme="gradio/dracula_test@0.0.2") as demo:
|
|
pass
|
|
|
|
assert demo.theme.to_dict() == dracula.to_dict()
|
|
assert demo.theme.name == "gradio/dracula_test"
|
|
|
|
def test_theme_download_raises_error_if_theme_does_not_exist(self):
|
|
with pytest.raises(
|
|
ValueError, match="The space freddyaboulton/nonexistent does not exist"
|
|
):
|
|
gr.themes.Base.from_hub("freddyaboulton/nonexistent").to_dict()
|
|
|
|
@patch("gradio.themes.base.huggingface_hub")
|
|
@patch("gradio.themes.base.Base._theme_version_exists", return_value=True)
|
|
def test_theme_upload_fails_if_duplicate_version(self, mock_1, mock_2):
|
|
with pytest.raises(ValueError, match="already has a theme with version 0.2.1"):
|
|
dracula.push_to_hub("dracula_revamped", version="0.2.1", hf_token="foo")
|
|
|
|
@patch("gradio.themes.base.huggingface_hub")
|
|
@patch("gradio.themes.base.huggingface_hub.HfApi")
|
|
def test_upload_fails_if_not_valid_semver(self, mock_1, mock_2):
|
|
with pytest.raises(ValueError, match="Invalid version string: '3.0'"):
|
|
dracula.push_to_hub("dracula_revamped", version="3.0", hf_token="s")
|
|
|
|
def test_dump_and_load(self):
|
|
with tempfile.NamedTemporaryFile(suffix=".json", delete=False) as path:
|
|
dracula.dump(path.name)
|
|
assert gr.themes.Base.load(path.name).to_dict() == dracula.to_dict()
|
|
|
|
@patch("gradio.themes.base.Base._get_next_version", return_value="0.1.3")
|
|
@patch("gradio.themes.base.Base._theme_version_exists", return_value=False)
|
|
@patch("gradio.themes.base.huggingface_hub")
|
|
def test_version_and_token_optional(self, mock_1, mock_2, mock_3):
|
|
mock_1.whoami.return_value = {"name": "freddyaboulton"}
|
|
|
|
gr.themes.Monochrome().push_to_hub(repo_name="my_monochrome")
|
|
repo_call_args = mock_1.HfApi().create_commit.call_args_list[0][1]
|
|
assert repo_call_args["repo_id"] == "freddyaboulton/my_monochrome"
|
|
assert any(
|
|
o.path_in_repo == "themes/theme_schema@0.1.3.json"
|
|
for o in repo_call_args["operations"]
|
|
)
|
|
mock_1.whoami.assert_called_with()
|
|
|
|
@patch("gradio.themes.base.huggingface_hub")
|
|
def test_first_upload_no_version(self, mock_1):
|
|
mock_1.whoami.return_value = {"name": "freddyaboulton"}
|
|
|
|
mock_1.HfApi().space_info.side_effect = huggingface_hub.hf_api.HTTPError("Foo")
|
|
|
|
gr.themes.Monochrome().push_to_hub(repo_name="does_not_exist")
|
|
repo_call_args = mock_1.HfApi().create_commit.call_args_list[0][1]
|
|
assert repo_call_args["repo_id"] == "freddyaboulton/does_not_exist"
|
|
assert any(
|
|
o.path_in_repo == "themes/theme_schema@0.0.1.json"
|
|
for o in repo_call_args["operations"]
|
|
)
|
|
mock_1.whoami.assert_called_with()
|
|
|
|
@patch("gradio.themes.base.Base._get_next_version", return_value="0.1.3")
|
|
@patch("gradio.themes.base.Base._theme_version_exists", return_value=False)
|
|
@patch("gradio.themes.base.huggingface_hub")
|
|
def test_can_pass_version_and_theme(self, mock_1, mock_2, mock_3):
|
|
mock_1.whoami.return_value = {"name": "freddyaboulton"}
|
|
|
|
gr.themes.Monochrome().push_to_hub(
|
|
repo_name="my_monochrome", version="0.1.5", hf_token="foo"
|
|
)
|
|
repo_call_args = mock_1.HfApi().create_commit.call_args_list[0][1]
|
|
assert repo_call_args["repo_id"] == "freddyaboulton/my_monochrome"
|
|
assert any(
|
|
o.path_in_repo == "themes/theme_schema@0.1.5.json"
|
|
for o in repo_call_args["operations"]
|
|
)
|
|
mock_1.whoami.assert_called_with(token="foo")
|
|
|
|
@patch("gradio.themes.base.huggingface_hub")
|
|
def test_raise_error_if_no_token_and_not_logged_in(self, mock_1):
|
|
mock_1.whoami.side_effect = OSError("not logged in")
|
|
|
|
with pytest.raises(
|
|
ValueError,
|
|
match="In order to push to hub, log in via `huggingface-cli login`",
|
|
):
|
|
gr.themes.Monochrome().push_to_hub(
|
|
repo_name="my_monochrome", version="0.1.5"
|
|
)
|
|
|
|
@patch("gradio.themes.base.Base._get_next_version", return_value="0.1.3")
|
|
@patch("gradio.themes.base.Base._theme_version_exists", return_value=False)
|
|
@patch("gradio.themes.base.huggingface_hub")
|
|
def test_can_upload_to_org(self, mock_1, mock_2, mock_3):
|
|
mock_1.whoami.return_value = {"name": "freddyaboulton"}
|
|
|
|
gr.themes.Monochrome().push_to_hub(
|
|
repo_name="my_monochrome", version="0.1.9", org_name="gradio"
|
|
)
|
|
repo_call_args = mock_1.HfApi().create_commit.call_args_list[0][1]
|
|
assert repo_call_args["repo_id"] == "gradio/my_monochrome"
|
|
assert any(
|
|
o.path_in_repo == "themes/theme_schema@0.1.9.json"
|
|
for o in repo_call_args["operations"]
|
|
)
|
|
mock_1.whoami.assert_called_with()
|
|
|
|
@patch("gradio.themes.base.Base._get_next_version", return_value="0.1.3")
|
|
@patch("gradio.themes.base.Base._theme_version_exists", return_value=False)
|
|
@patch("gradio.themes.base.huggingface_hub")
|
|
def test_can_make_private(self, mock_1, mock_2, mock_3):
|
|
mock_1.whoami.return_value = {"name": "freddyaboulton"}
|
|
|
|
gr.themes.Monochrome().push_to_hub(
|
|
repo_name="my_monochrome", version="0.1.9", org_name="gradio", private=True
|
|
)
|
|
mock_1.create_repo.assert_called_with(
|
|
"gradio/my_monochrome",
|
|
repo_type="space",
|
|
space_sdk="gradio",
|
|
token=None,
|
|
exist_ok=True,
|
|
private=True,
|
|
)
|
|
|
|
|
|
def test_theme_builder_launches():
|
|
gr.themes.builder(prevent_thread_lock=True)
|
|
gr.close_all()
|