gradio/test/test_theme_sharing.py
Dawood Khan e9aa9eec37
gr.Number() max/min limit (#3991)
* 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>
2023-06-10 21:12:11 -04:00

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()