Skip to content

Commit

Permalink
Refactor parse_return_statement method to handle nested returns
Browse files Browse the repository at this point in the history
Fixes [Component Output] Custom component does not display output connection points in Langflow UI #1357
  • Loading branch information
ogabrielluiz committed Mar 21, 2024
1 parent f0b93a9 commit 3737e06
Showing 1 changed file with 24 additions and 4 deletions.
28 changes: 24 additions & 4 deletions src/backend/langflow/interface/custom/code_parser/code_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

from cachetools import TTLCache, cachedmethod, keys
from fastapi import HTTPException


from langflow.interface.custom.schema import CallableCodeDetails, ClassCodeDetails


Expand Down Expand Up @@ -234,10 +236,28 @@ def parse_function_body(self, node: ast.FunctionDef) -> List[str]:

def parse_return_statement(self, node: ast.FunctionDef) -> bool:
"""
Parses the return statement of a function or method node.
"""

return any(isinstance(n, ast.Return) for n in node.body)
Parses the return statement of a function or method node, including nested returns.
"""

def has_return(node):
if isinstance(node, ast.Return):
return True
elif isinstance(node, ast.If):
return any(has_return(child) for child in node.body) or any(has_return(child) for child in node.orelse)
elif isinstance(node, ast.Try):
return (
any(has_return(child) for child in node.body)
or any(has_return(child) for child in node.handlers)
or any(has_return(child) for child in node.finalbody)
)
elif isinstance(node, (ast.For, ast.While)):
return any(has_return(child) for child in node.body) or any(has_return(child) for child in node.orelse)
elif isinstance(node, ast.With):
return any(has_return(child) for child in node.body)
else:
return False

return any(has_return(child) for child in node.body)

def parse_assign(self, stmt):
"""
Expand Down

0 comments on commit 3737e06

Please sign in to comment.