From a3365086468568db871940fa2807454ac047cadd Mon Sep 17 00:00:00 2001 From: Freddy Boulton Date: Fri, 19 Jan 2024 02:02:08 +0530 Subject: [PATCH] Fix bug preventing layout components to be used as custom components (#7050) --- .changeset/cruel-games-wash.md | 5 +++++ gradio/blocks.py | 16 ++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 .changeset/cruel-games-wash.md diff --git a/.changeset/cruel-games-wash.md b/.changeset/cruel-games-wash.md new file mode 100644 index 0000000000..1d9b48a29b --- /dev/null +++ b/.changeset/cruel-games-wash.md @@ -0,0 +1,5 @@ +--- +"gradio": patch +--- + +fix:Fix bug preventing layout components to be used as custom components diff --git a/gradio/blocks.py b/gradio/blocks.py index c13fda512e..45a83497e8 100644 --- a/gradio/blocks.py +++ b/gradio/blocks.py @@ -618,9 +618,9 @@ class Blocks(BlockContext, BlocksEvents, metaclass=BlocksMeta): self.queue() - def get_component(self, id: int) -> Component: + def get_component(self, id: int) -> Component | BlockContext: comp = self.blocks[id] - assert isinstance(comp, components.Component), f"{comp}" + assert isinstance(comp, (components.Component, BlockContext)), f"{comp}" return comp @property @@ -2307,8 +2307,10 @@ Received outputs: # The config has the most specific API info (taking into account the parameters # of the component), so we use that if it exists. Otherwise, we fallback to the # Serializer's API info. - info = self.get_component(component["id"]).api_info() - example = self.get_component(component["id"]).example_inputs() + comp = self.get_component(component["id"]) + assert isinstance(comp, components.Component) + info = comp.api_info() + example = comp.example_inputs() python_type = client_utils.json_schema_to_python_type(info) dependency_info["parameters"].append( { @@ -2335,8 +2337,10 @@ Received outputs: if self.blocks[component["id"]].skip_api: continue label = component["props"].get("label", f"value_{o}") - info = self.get_component(component["id"]).api_info() - example = self.get_component(component["id"]).example_inputs() + comp = self.get_component(component["id"]) + assert isinstance(comp, components.Component) + info = comp.api_info() + example = comp.example_inputs() python_type = client_utils.json_schema_to_python_type(info) dependency_info["returns"].append( {