code: def substring_evaluator(self, index):
      
      condition_name = self.condition_data[index][0]
      condition_value = self.condition_data[index][1]
      user_value = self.attributes.get(condition_name)
  
      if not isinstance(condition_value, string_types):
        self.logger.warning(audience_logs.UNKNOWN_CONDITION_VALUE.format(
          self._get_condition_json(index),
        ))
        return None
  
      if not isinstance(user_value, string_types):
        self.logger.warning(audience_logs.UNEXPECTED_TYPE.format(
            self._get_condition_json(index),
            type(user_value),
            condition_name
        ))
        return None
  
      return condition_value in user_value
docs: Evaluate the given substring match condition for the given user attributes.
  
      Args:
        index: Index of the condition to be evaluated.
  
      Returns:
        Boolean:
          - True if the condition value is a substring of the user attribute value.
          - False if the condition value is not a substring of the user attribute value.
        None: if the condition value isn't a string or the user attribute value isn't a string.