code: def raise_api_error(resp, state=None):
      
      # TODO: Refactor into an Exception class
      error_code = resp.status_code
  
      if error_code == 402:
          error_message = (
              "Please add a payment method to upload more samples. If you continue to "
              "experience problems, contact us at help@onecodex.com for assistance."
          )
      elif error_code == 403:
          error_message = "Please login to your One Codex account or pass the appropriate API key."
      else:
          try:
              error_json = resp.json()
          except ValueError:
              error_json = {}
  
          if "msg" in error_json:
              error_message = error_json["msg"].rstrip(".")
          elif "message" in error_json:
              error_message = error_json["message"].rstrip(".")
          else:
              error_message = None
  
          if state == "init" and not error_message:
              error_message = (
                  "Could not initialize upload. Are you logged in? If this problem "
                  "continues, please contact help@onecodex.com for assistance."
              )
          elif state == "upload" and not error_message:
              error_message = (
                  "File could not be uploaded. If this problem continues, please contact "
                  "help@onecodex.com for assistance."
              )
          elif state == "callback" and not error_message:
              error_message = (
                  "Callback could not be completed. If this problem continues, please "
                  "contact help@onecodex.com for assistance."
              )
  
      if error_message is None:
          error_message = "Upload failed. Please contact help@onecodex.com for assistance."
  
      raise UploadException(error_message)
docs: Raise an exception with a pretty message in various states of upload