mirror of
https://github.com/hwchase17/langchain.git
synced 2025-07-17 18:23:59 +00:00
handle single arg to and/or (#5637)
@ryderwishart @eyurtsev thoughts on handling this in the parser itself? related to #5570
This commit is contained in:
parent
934319fc28
commit
ae3611730a
@ -68,11 +68,14 @@ class QueryTransformer(Transformer):
|
|||||||
def program(self, *items: Any) -> tuple:
|
def program(self, *items: Any) -> tuple:
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def func_call(self, func_name: Any, *args: Any) -> FilterDirective:
|
def func_call(self, func_name: Any, args: list) -> FilterDirective:
|
||||||
func = self._match_func_name(str(func_name))
|
func = self._match_func_name(str(func_name))
|
||||||
if isinstance(func, Comparator):
|
if isinstance(func, Comparator):
|
||||||
return Comparison(comparator=func, attribute=args[0][0], value=args[0][1])
|
return Comparison(comparator=func, attribute=args[0], value=args[1])
|
||||||
return Operation(operator=func, arguments=args[0])
|
elif len(args) == 1 and func in (Operator.AND, Operator.OR):
|
||||||
|
return args[0]
|
||||||
|
else:
|
||||||
|
return Operation(operator=func, arguments=args)
|
||||||
|
|
||||||
def _match_func_name(self, func_name: str) -> Union[Operator, Comparator]:
|
def _match_func_name(self, func_name: str) -> Union[Operator, Comparator]:
|
||||||
if func_name in set(Comparator):
|
if func_name in set(Comparator):
|
||||||
|
@ -114,3 +114,11 @@ def test_parse_bool_value(x: str) -> None:
|
|||||||
actual = parsed.value
|
actual = parsed.value
|
||||||
expected = x.lower() == "true"
|
expected = x.lower() == "true"
|
||||||
assert actual == expected
|
assert actual == expected
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("op", ("and", "or"))
|
||||||
|
@pytest.mark.parametrize("arg", ('eq("foo", 2)', 'and(eq("foo", 2), lte("bar", 1.1))'))
|
||||||
|
def test_parser_unpack_single_arg_operation(op: str, arg: str) -> None:
|
||||||
|
expected = DEFAULT_PARSER.parse(arg)
|
||||||
|
actual = DEFAULT_PARSER.parse(f"{op}({arg})")
|
||||||
|
assert expected == actual
|
||||||
|
Loading…
Reference in New Issue
Block a user