class_docstr: Monitors a jira ticket for given change in terms of function.
  
  :param jira_conn_id: reference to a pre-defined Jira Connection
  :param ticket_id: id of the ticket to be monitored
  :param field: field of the ticket to be monitored
  :param expected_value: expected value of the field
  :param result_processor: function that return boolean and act as a sensor response
class_docstr_tok: ["Monitors","a","jira","ticket","for","given","change","in","terms","of","function",".",":","param","jira_conn_id",":","reference","to","a","pre-defined","Jira","Connection",":","param","ticket_id",":","id","of","the","ticket","to","be","monitored",":","param","field",":","field","of","the","ticket","to","be","monitored",":","param","expected_value",":","expected","value","of","the","field",":","param","result_processor",":","function","that","return","boolean","and","act","as","a","sensor","response"]
docstr: Check issue using different conditions to prepare to evaluate sensor.
docstr_tok: ["Check","issue","using","different","conditions","to","prepare","to","evaluate","sensor","."]
code: def issue_field_checker(self, jira_result: dict) -> bool | None:
      """Check issue using different conditions to prepare to evaluate sensor."""
      result = None
      if (
          jira_result is not None
          and self.field is not None
          and self.expected_value is not None
      ):
          field_val = jira_result.get("fields", {}).get(
              self.field, None
          )
          if field_val is not None:
              if isinstance(field_val, list):
                  result = self.expected_value in field_val
              elif isinstance(field_val, str):
                  result = (
                      self.expected_value.lower() == field_val.lower()
                  )
              elif isinstance(field_val, dict) and field_val.get(
                  "name", None
              ):
                  result = (
                      self.expected_value.lower()
                      == field_val.get("name", "").lower()
                  )
              else:
                  self.log.warning(
                      "Not implemented checker for issue field %s which "
                      "is neither string nor list nor Jira Resource",
                      self.field,
                  )
  
      if result is True:
          self.log.info(
              "Issue field %s has expected value %s, returning success",
              self.field,
              self.expected_value,
          )
      else:
          self.log.info(
              "Issue field %s don't have expected value %s yet.",
              self.field,
              self.expected_value,
          )
      return result
  
file_path: airflow/airflow/providers/atlassian/jira/sensors/jira.py
imports: from __future__ import annotations
  from typing import TYPE_CHECKING, Any, Callable, Sequence
  from airflow.providers.atlassian.jira.hooks.jira import JiraHook
  from airflow.sensors.base import BaseSensorOperator
label_desc: Use image node_id 3 for calling the JiraTicketSensor obj's underlying member method code with example usage: obj.issue_field_checker(jira_result) and returns: result