code: def generate_candidates(author, issues):
      candidates = []
      # First check for full name of GitHub user
      github_name = get_github_name(author, github_client)
      if github_name:
          candidates.append(
              (github_name, "Full name of GitHub user %s" % author)
          )
      else:
          candidates.append(
              (
                  NOT_FOUND,
                  "No full name found for GitHub user %s" % author,
              )
          )
      # Then do the same for JIRA user
      jira_name = get_jira_name(author, jira_client)
      if jira_name:
          candidates.append(
              (jira_name, "Full name of JIRA user %s" % author)
          )
      else:
          candidates.append(
              (
                  NOT_FOUND,
                  "No full name found for JIRA user %s" % author,
              )
          )
      # Then do the same for the assignee of each of the associated JIRAs
      # Note that a given issue may not have an assignee, or the assignee may not have a full name
      for issue in issues:
          try:
              jira_issue = jira_client.issue(issue)
          except JIRAError as e:
              # Do not exit just because an issue is not found!
              if e.status_code == 404:
                  warnings.append("Issue %s not found!" % issue)
                  continue
              raise e
          jira_assignee = jira_issue.fields.assignee
          if jira_assignee:
              user_name = jira_assignee.name
              display_name = jira_assignee.displayName
              if display_name:
                  candidates.append(
                      (
                          display_name,
                          "Full name of %s assignee %s"
                          % (issue, user_name),
                      )
                  )
              else:
                  candidates.append(
                      (
                          NOT_FOUND,
                          "No full name found for %s assignee %s"
                          % (issue, user_name),
                      )
                  )
          else:
              candidates.append(
                  (NOT_FOUND, "No assignee found for %s" % issue)
              )
      for i, (candidate, source) in enumerate(candidates):
          candidate = candidate.strip()
          candidates[i] = (candidate, source)
      return candidates
  
label_desc: Use image node_id 1 for calling a global function with example usage: generate_candidates(author, issues) and returns: candidates