🐛 fix(types.py): replace eval() with ast.literal_eval() to safely evaluate headers parameter as dictionary-like string

🐛 fix(process.py): rename input parameter to flow for clarity and to avoid shadowing built-in function
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-07-09 18:02:12 -03:00
commit 008a1c4079
2 changed files with 8 additions and 7 deletions

View file

@ -1,3 +1,4 @@
import ast
from typing import Any, Dict, List, Optional, Union from typing import Any, Dict, List, Optional, Union
from langflow.graph.vertex.base import Vertex from langflow.graph.vertex.base import Vertex
@ -79,7 +80,7 @@ class WrapperVertex(Vertex):
def build(self, force: bool = False) -> Any: def build(self, force: bool = False) -> Any:
if not self._built or force: if not self._built or force:
if "headers" in self.params: if "headers" in self.params:
self.params["headers"] = eval(self.params["headers"]) self.params["headers"] = ast.literal_eval(self.params["headers"])
self._build() self._build()
return self._built_object return self._built_object

View file

@ -123,23 +123,23 @@ def process_graph_cached(data_graph: Dict[str, Any], inputs: Optional[dict] = No
def load_flow_from_json( def load_flow_from_json(
input: Union[Path, str, dict], tweaks: Optional[dict] = None, build=True flow: Union[Path, str, dict], tweaks: Optional[dict] = None, build=True
): ):
""" """
Load flow from a JSON file or a JSON object. Load flow from a JSON file or a JSON object.
:param input: JSON file path or JSON object :param flow: JSON file path or JSON object
:param tweaks: Optional tweaks to be processed :param tweaks: Optional tweaks to be processed
:param build: If True, build the graph, otherwise return the graph object :param build: If True, build the graph, otherwise return the graph object
:return: Langchain object or Graph object depending on the build parameter :return: Langchain object or Graph object depending on the build parameter
""" """
# If input is a file path, load JSON from the file # If input is a file path, load JSON from the file
if isinstance(input, (str, Path)): if isinstance(flow, (str, Path)):
with open(input, "r", encoding="utf-8") as f: with open(flow, "r", encoding="utf-8") as f:
flow_graph = json.load(f) flow_graph = json.load(f)
# If input is a dictionary, assume it's a JSON object # If input is a dictionary, assume it's a JSON object
elif isinstance(input, dict): elif isinstance(flow, dict):
flow_graph = input flow_graph = flow
else: else:
raise TypeError( raise TypeError(
"Input must be either a file path (str) or a JSON object (dict)" "Input must be either a file path (str) or a JSON object (dict)"