code: def choose_jira_assignee(issue):
      """
      Prompt the user to choose who to assign the issue to in jira, given a list of candidates,
      including the original reporter and all commentators
      """
      while True:
          try:
              reporter = issue.fields.reporter
              commentators = list(
                  map(lambda x: x.author, issue.fields.comment.comments)
              )
              candidates = set(commentators)
              candidates.add(reporter)
              candidates = list(candidates)
              print("JIRA is unassigned, choose assignee")
              for idx, author in enumerate(candidates):
                  if author.key == "apachespark":
                      continue
                  annotations = (
                      ["Reporter"] if author == reporter else []
                  )
                  if author in commentators:
                      annotations.append("Commentator")
                  print(
                      "[%d] %s (%s)"
                      % (idx, author.displayName, ",".join(annotations))
                  )
              raw_assignee = input(
                  "Enter number of user, or userid, to assign to (blank to leave unassigned):"
              )
              if raw_assignee == "":
                  return None
              else:
                  try:
                      id = int(raw_assignee)
                      assignee = candidates[id]
                  except BaseException:
                      # assume it's a user id, and try to assign (might fail, we just prompt again)
                      assignee = asf_jira.user(raw_assignee)
                  try:
                      assign_issue(issue.key, assignee.name)
                  except Exception as e:
                      if (
                          e.__class__.__name__ == "JIRAError"
                          and (
                              "'%s' cannot be assigned" % assignee.name
                          )
                          in getattr(e, "response").text
                      ):
                          continue_maybe(
                              "User '%s' cannot be assigned, add to contributors role and try again?"
                              % assignee.name
                          )
                          grant_contributor_role(assignee.name)
                          assign_issue(issue.key, assignee.name)
                      else:
                          raise e
                  return assignee
          except KeyboardInterrupt:
              raise
          except BaseException:
              traceback.print_exc()
              print(
                  "Error assigning JIRA, try again (or leave blank and fix manually)"
              )
  
imports: import json
  import os
  import re
  import subprocess
  import sys
  import traceback
  from urllib.request import urlopen
  from urllib.request import Request
  from urllib.error import HTTPError
label_desc: Use image node_id 11 for calling a global function with example usage: choose_jira_assignee(issue) and returns: None, assignee