from langflow.custom import Component from langflow.field_typing import Text from langflow.io import BoolInput, DropdownInput, MessageTextInput, Output class SelectivePassThroughComponent(Component): display_name = "Selective Pass Through" description = "Passes the specified value if a specified condition is met." icon = "filter" name = "SelectivePassThrough" inputs = [ MessageTextInput( name="input_value", display_name="Input Value", info="The primary input value to evaluate.", ), MessageTextInput( name="comparison_value", display_name="Comparison Value", info="The value to compare against the input value.", ), DropdownInput( name="operator", display_name="Operator", options=["equals", "not equals", "contains", "starts with", "ends with"], info="Condition to evaluate the input value.", ), MessageTextInput( name="value_to_pass", display_name="Value to Pass", info="The value to pass if the condition is met.", ), BoolInput( name="case_sensitive", display_name="Case Sensitive", info="If true, the comparison will be case sensitive.", value=False, advanced=True, ), ] outputs = [ Output(display_name="Passed Output", name="passed_output", method="pass_through"), ] def evaluate_condition( self, input_value: str, comparison_value: str, operator: str, *, case_sensitive: bool ) -> bool: if not case_sensitive: input_value = input_value.lower() comparison_value = comparison_value.lower() if operator == "equals": return input_value == comparison_value if operator == "not equals": return input_value != comparison_value if operator == "contains": return comparison_value in input_value if operator == "starts with": return input_value.startswith(comparison_value) if operator == "ends with": return input_value.endswith(comparison_value) return False def pass_through(self) -> Text: input_value = self.input_value comparison_value = self.comparison_value operator = self.operator value_to_pass = self.value_to_pass case_sensitive = self.case_sensitive if self.evaluate_condition(input_value, comparison_value, operator, case_sensitive=case_sensitive): self.status = value_to_pass return value_to_pass self.status = "" return ""