diff --git a/.changeset/all-cougars-matter.md b/.changeset/all-cougars-matter.md new file mode 100644 index 0000000000000..ee1986e47e0a1 --- /dev/null +++ b/.changeset/all-cougars-matter.md @@ -0,0 +1,5 @@ +--- +"gradio": patch +--- + +fix:Fix data model for `gr.DataFrame` diff --git a/gradio/components/dataframe.py b/gradio/components/dataframe.py index 5f7f6505a5d04..94d4a9ca1d52f 100644 --- a/gradio/components/dataframe.py +++ b/gradio/components/dataframe.py @@ -19,9 +19,7 @@ class DataframeData(GradioModel): headers: List[str] data: List[List[Any]] - metadata: Optional[ - Dict[str, List[Any]] - ] = None # Optional[Dict[str, List[Any]]] = None + metadata: Optional[Dict[str, Optional[List[Any]]]] = None set_documentation_group("component") @@ -216,7 +214,7 @@ def postprocess( return DataframeData( headers=list(df.columns), data=df.to_dict(orient="split")["data"], # type: ignore - metadata=self.__extract_metadata(value), + metadata=self.__extract_metadata(value), # type: ignore ) elif isinstance(value, (str, pd.DataFrame)): df = pd.read_csv(value) if isinstance(value, str) else value # type: ignore diff --git a/js/app/test/gallery_component_events.spec.ts b/js/app/test/gallery_component_events.spec.ts index 5c4122278134b..be072cccffc77 100644 --- a/js/app/test/gallery_component_events.spec.ts +++ b/js/app/test/gallery_component_events.spec.ts @@ -18,6 +18,7 @@ test("Gallery preview mode displays all images correctly.", async ({ test("Gallery select event returns the right value", async ({ page }) => { await page.getByRole("button", { name: "Run" }).click(); await page.getByLabel("Thumbnail 2 of 3").click(); + await page.waitForTimeout(200); expect(await page.getByLabel("Select Data")).toHaveValue( "https://gradio-builds.s3.amazonaws.com/assets/lite-logo.png" ); diff --git a/test/test_components.py b/test/test_components.py index 9493b0549e180..1e19839c0aad2 100644 --- a/test/test_components.py +++ b/test/test_components.py @@ -997,6 +997,14 @@ def test_component_functions(self): dataframe_input = gr.Dataframe() output = dataframe_input.preprocess(DataframeData(**x_data)) assert output["Age"][1] == 24 + + x_data = { + "data": [["Tim", 12, False], ["Jan", 24, True]], + "headers": ["Name", "Age", "Member"], + "metadata": {"display_value": None, "styling": None}, + } + dataframe_input.preprocess(DataframeData(**x_data)) + with pytest.raises(ValueError): gr.Dataframe(type="unknown")