diff --git a/.changeset/all-cougars-matter.md b/.changeset/all-cougars-matter.md new file mode 100644 index 0000000000..ee1986e47e --- /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 5f7f6505a5..94d4a9ca1d 100644 --- a/gradio/components/dataframe.py +++ b/gradio/components/dataframe.py @@ -19,9 +19,7 @@ from gradio.events import Events 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 @@ class Dataframe(Component): 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/test/test_components.py b/test/test_components.py index 9493b0549e..1e19839c0a 100644 --- a/test/test_components.py +++ b/test/test_components.py @@ -997,6 +997,14 @@ class TestDataframe: 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")