code: def _finish(
      self,
      curl: pycurl.Curl,
      curl_error: Optional[int] = None,
      curl_message: Optional[str] = None,
  ) -> None:
      info = curl.info  # type: ignore
      curl.info = None  # type: ignore
      self._multi.remove_handle(curl)
      self._free_list.append(curl)
      buffer = info["buffer"]
      if curl_error:
          assert curl_message is not None
          error = CurlError(
              curl_error, curl_message
          )  # type: Optional[CurlError]
          assert error is not None
          code = error.code
          effective_url = None
          buffer.close()
          buffer = None
      else:
          error = None
          code = curl.getinfo(pycurl.HTTP_CODE)
          effective_url = curl.getinfo(pycurl.EFFECTIVE_URL)
          buffer.seek(0)
      # the various curl timings are documented at
      # http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html
      time_info = dict(
          queue=info["curl_start_ioloop_time"]
          - info["queue_start_time"],
          namelookup=curl.getinfo(pycurl.NAMELOOKUP_TIME),
          connect=curl.getinfo(pycurl.CONNECT_TIME),
          appconnect=curl.getinfo(pycurl.APPCONNECT_TIME),
          pretransfer=curl.getinfo(pycurl.PRETRANSFER_TIME),
          starttransfer=curl.getinfo(pycurl.STARTTRANSFER_TIME),
          total=curl.getinfo(pycurl.TOTAL_TIME),
          redirect=curl.getinfo(pycurl.REDIRECT_TIME),
      )
      try:
          info["callback"](
              HTTPResponse(
                  request=info["request"],
                  code=code,
                  headers=info["headers"],
                  buffer=buffer,
                  effective_url=effective_url,
                  error=error,
                  reason=info["headers"].get("X-Http-Reason", None),
                  request_time=self.io_loop.time()
                  - info["curl_start_ioloop_time"],
                  start_time=info["curl_start_time"],
                  time_info=time_info,
              )
          )
      except Exception:
          self.handle_callback_exception(info["callback"])
  
imports: import collections
  import functools
  import logging
  import pycurl
  import threading
  import time
  from io import BytesIO
  from tornado import httputil
  from tornado import ioloop
  from tornado.escape import utf8, native_str
  from tornado.httpclient import HTTPRequest, HTTPResponse, HTTPError, AsyncHTTPClient, main
  from tornado.log import app_log
  from typing import Dict, Any, Callable, Union, Optional
  import typing
label_desc: Use image node_id 11 for calling the CurlAsyncHTTPClient obj's underlying member method code with example usage: obj._finish(curl, curl_error, curl_message) without return types