code: def complete_multipart_upload(self, bucket, object_name, upload_id,
                                    parts_list, content_type=None, metadata={}):
          
          data = self._build_complete_multipart_upload_xml(parts_list)
          objectname_plus = '%s?uploadId=%s' % (object_name, upload_id)
          details = self._details(
              method=b"POST",
              url_context=self._url_context(bucket=bucket, object_name=objectname_plus),
              headers=self._headers(content_type),
              metadata=metadata,
              body=data,
          )
          d = self._submit(self._query_factory(details))
          # TODO - handle error responses
          d.addCallback(
              lambda (response, body): MultipartCompletionResponse.from_xml(body)
          )
          return d
docs: Complete a multipart upload.
  
          N.B. This can be possibly be a slow operation.
  
          @param bucket: The bucket name
          @param object_name: The object name
          @param upload_id: The multipart upload id
          @param parts_list: A List of all the parts
              (2-tuples of part sequence number and etag)
          @param content_type: The Content-Type of the object
          @param metadata: C{dict} containing additional metadata
          @return: a C{Deferred} that fires after request is complete