if len(partETags) != partCount:
        raise Exception('copyParts fail due to some parts are not finished yet')

    # View all parts uploaded recently
    print('Listing all parts......')
    resp = obsClient.listParts(bucketName, objectKey, uploadId)
    if resp.status < 300:
        for part in resp.body.parts:
            print('\tPart#' + str(part.partNumber) + ', ETag=' + part.etag)
        print('\n')
    else:
        raise Exception('listParts failed')

    # Complete to upload multiparts

    partETags = sorted(partETags.items(), key=lambda d: d[0])

    parts = []
    for key, value in partETags:
        parts.append(CompletePart(partNum=key, etag=value))

    print('Completing to upload multiparts\n')
    resp = obsClient.completeMultipartUpload(bucketName, objectKey, uploadId, CompleteMultipartUploadRequest(parts))
    if resp.status < 300:
        print('Succeed to complete multiparts into an object named ' + objectKey + '\n')
    else:
        print('errorCode:', resp.errorCode)
        print('errorMessage:', resp.errorMessage)
        raise Exception('completeMultipartUpload failed')
# Constructs a obs client instance with your account for accessing OBS
obsClient = ObsClient(access_key_id=AK, secret_access_key=SK, server=server)

# Create bucket
print('Create a new bucket for demo\n')
obsClient.createBucket(bucketName)

# Step 1: initiate multipart upload
print('Step 1: initiate multipart upload \n')
resp = obsClient.initiateMultipartUpload(bucketName, objectKey)
uploadId = resp.body.uploadId

# Step 2: upload a part
print('Step 2: upload a part\n')

partNum = 1
resp = obsClient.uploadPart(bucketName,
                            objectKey,
                            partNumber=partNum,
                            uploadId=uploadId,
                            content='Hello OBS')
etag = dict(resp.header).get('etag')

# Step 3: complete multipart upload
print('Step 3: complete multipart upload\n')
resp = obsClient.completeMultipartUpload(
    bucketName, objectKey, uploadId,
    CompleteMultipartUploadRequest([CompletePart(partNum=partNum, etag=etag)]))
if resp.status < 300:
    print('Complete finished\n')