|
@@ -838,19 +838,19 @@ class Var:
|
|
|
if invoke_fn:
|
|
|
# invoke the function on left operand.
|
|
|
operation_name = (
|
|
|
- f"{left_operand_full_name}.{fn}({right_operand_full_name})" # type: ignore
|
|
|
- )
|
|
|
+ f"{left_operand_full_name}.{fn}({right_operand_full_name})"
|
|
|
+ ) # type: ignore
|
|
|
else:
|
|
|
# pass the operands as arguments to the function.
|
|
|
operation_name = (
|
|
|
- f"{left_operand_full_name} {op} {right_operand_full_name}" # type: ignore
|
|
|
- )
|
|
|
+ f"{left_operand_full_name} {op} {right_operand_full_name}"
|
|
|
+ ) # type: ignore
|
|
|
operation_name = f"{fn}({operation_name})"
|
|
|
else:
|
|
|
# apply operator to operands (left operand <operator> right_operand)
|
|
|
operation_name = (
|
|
|
- f"{left_operand_full_name} {op} {right_operand_full_name}" # type: ignore
|
|
|
- )
|
|
|
+ f"{left_operand_full_name} {op} {right_operand_full_name}"
|
|
|
+ ) # type: ignore
|
|
|
operation_name = format.wrap(operation_name, "(")
|
|
|
else:
|
|
|
# apply operator to left operand (<operator> left_operand)
|
|
@@ -1353,11 +1353,12 @@ class Var:
|
|
|
"'in' operator not supported for Var types, use Var.contains() instead."
|
|
|
)
|
|
|
|
|
|
- def contains(self, other: Any) -> Var:
|
|
|
+ def contains(self, other: Any, field: Union[Var, None] = None) -> Var:
|
|
|
"""Check if a var contains the object `other`.
|
|
|
|
|
|
Args:
|
|
|
other: The object to check.
|
|
|
+ field: Optionally specify a field to check on both object and the other var.
|
|
|
|
|
|
Raises:
|
|
|
VarTypeError: If the var is not a valid type: dict, list, tuple or str.
|
|
@@ -1393,8 +1394,16 @@ class Var:
|
|
|
raise VarTypeError(
|
|
|
f"'in <string>' requires string as left operand, not {other._var_type}"
|
|
|
)
|
|
|
+
|
|
|
+ _var_name = None
|
|
|
+ if field is None:
|
|
|
+ _var_name = f"{self._var_name}.includes({other._var_full_name})"
|
|
|
+ else:
|
|
|
+ field = Var.create_safe(field, _var_is_string=isinstance(field, str))
|
|
|
+ _var_name = f"{self._var_name}.some(e=>e[{field._var_name_unwrapped}]==={other._var_full_name})"
|
|
|
+
|
|
|
return self._replace(
|
|
|
- _var_name=f"{self._var_name}.includes({other._var_full_name})",
|
|
|
+ _var_name=_var_name,
|
|
|
_var_type=bool,
|
|
|
_var_is_string=False,
|
|
|
merge_var_data=other._var_data,
|