def _make_request(self, method, bucket, key, headers, params, body, request_timeout, callback):
    # Build the boto HTTP request in order to create the authorization header.
    path = AsyncS3Connection.DefaultCallingFormat.build_path_base(bucket, key)
    auth_path = AsyncS3Connection.DefaultCallingFormat.build_auth_path(bucket, key)
    host = AsyncS3Connection.DefaultCallingFormat.build_host(self.server_name(), bucket)

    # Only support byte strings for now.
    assert not body or type(body) is str, "Only support byte strings (type=%s)." % type(body)

    boto_request = self.build_base_http_request(method, path, auth_path,
                                                {}, headers, body or '', host)
    boto_request.authorize(connection=self)

    # Log request for debugging.
    debug_body = boto_request.body[:256].decode(errors='ignore') if boto_request.body else None
    logging.debug('%s "%s://%s%s" headers: %s body: %s', boto_request.method, self.protocol,
                  boto_request.host, boto_request.path, boto_request.headers, debug_body)

    request_url = '%s://%s%s' % (self.protocol, host, path)
    if params:
      request_url += '?' + urllib.urlencode(params)

    # Build the tornado http client request (different version of HTTPRequest class).
    tornado_request = HTTPRequest(request_url, method=method,
                                  headers=boto_request.headers, body=body,
                                  request_timeout=request_timeout)

    # Start the asynchronous request. When it's complete, invoke 'callback', passing the HTTP response object.
    http_client = AsyncHTTPClient()
    http_client.fetch(tornado_request, callback=callback)
Look at each fiducial list in scene and find any fiducials associated
dataset/ETHPy150Open viewfinderco/viewfinder/backend/storage/async_s3.py/AsyncS3Connection._make_request--crossover with--dataset/ETHPy150Open acil-bwh/SlicerCIP/Scripted/InteractiveLobeSegmentation/InteractiveLobeSegmentation.py/InteractiveLobeSegmentationLogic.ModifyList