From 564634d36c21bb0da54f1fe13215dc43e8d1f0fd Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 10 Aug 2023 09:23:36 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(directory=5Freader.py):=20ha?= =?UTF-8?q?ndle=20SyntaxError=20when=20parsing=20code=20to=20prevent=20cra?= =?UTF-8?q?shes=20=F0=9F=90=9B=20fix(directory=5Freader.py):=20return=20Fa?= =?UTF-8?q?lse=20if=20code=20is=20not=20valid=20Python=20to=20prevent=20fa?= =?UTF-8?q?lse=20positives=20=F0=9F=90=9B=20fix(directory=5Freader.py):=20?= =?UTF-8?q?fix=20method=20name=20from=20is=5Ftype=5Fhint=5Fused=5Fbut=5Fno?= =?UTF-8?q?t=5Fimported=20to=20=5Fis=5Ftype=5Fhint=5Fused=5Fin=5Fargs=20fo?= =?UTF-8?q?r=20consistency=20=F0=9F=90=9B=20fix(directory=5Freader.py):=20?= =?UTF-8?q?fix=20method=20name=20from=20is=5Ftype=5Fhint=5Fimported=20to?= =?UTF-8?q?=20=5Fis=5Ftype=5Fhint=5Fimported=20for=20consistency=20?= =?UTF-8?q?=F0=9F=90=9B=20fix(directory=5Freader.py):=20fix=20return=20val?= =?UTF-8?q?ue=20of=20=5Fis=5Ftype=5Fhint=5Fused=5Fin=5Fargs=20method=20to?= =?UTF-8?q?=20return=20False=20if=20type=20hint=20is=20used=20but=20not=20?= =?UTF-8?q?imported?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interface/custom/directory_reader.py | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/backend/langflow/interface/custom/directory_reader.py b/src/backend/langflow/interface/custom/directory_reader.py index 57bb3ca95..7bff7b5f5 100644 --- a/src/backend/langflow/interface/custom/directory_reader.py +++ b/src/backend/langflow/interface/custom/directory_reader.py @@ -152,15 +152,19 @@ class DirectoryReader: Check if a specific type hint is used in the function definitions within the given code. """ - module = ast.parse(code) + try: + module = ast.parse(code) - for node in ast.walk(module): - if isinstance(node, ast.FunctionDef): - for arg in node.args.args: - if self._is_type_hint_in_arg_annotation( - arg.annotation, type_hint_name - ): - return True + for node in ast.walk(module): + if isinstance(node, ast.FunctionDef): + for arg in node.args.args: + if self._is_type_hint_in_arg_annotation( + arg.annotation, type_hint_name + ): + return True + except SyntaxError: + # Returns False if the code is not valid Python + return False return False def _is_type_hint_in_arg_annotation(self, annotation, type_hint_name: str) -> bool: @@ -204,8 +208,13 @@ class DirectoryReader: return False, "Syntax error" elif not self.validate_build(file_content): return False, "Missing build function" - elif self.is_type_hint_used_but_not_imported("Optional", file_content): - return False, "Type hint 'Optional' is used but not imported in the code." + elif self._is_type_hint_used_in_args( + "Optional", file_content + ) and not self._is_type_hint_imported("Optional", file_content): + return ( + False, + "Type hint 'Optional' is used but not imported in the code.", + ) else: if self.compress_code_field: file_content = str(StringCompressor(file_content).compress_string())