Skip to content

Commit

Permalink
Refactor parse_return_statement method to handle nested returns (#1549)
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 3fbcd02
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
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 3fbcd02

Please sign in to comment.