def doUploadPart(partETags, bucketName, objectKey, partNumber, uploadId,
                 filePath, partSize, offset):
    if IS_WINDOWS:
        global obsClient
    else:
        obsClient = ObsClient(access_key_id=AK,
                              secret_access_key=SK,
                              server=server)
    resp = obsClient.uploadPart(bucketName,
                                objectKey,
                                partNumber,
                                uploadId,
                                content=filePath,
                                isFile=True,
                                partSize=partSize,
                                offset=offset)
    if resp.status < 300:
        partETags[partNumber] = resp.body.etag
        print('Part#' + str(partNumber) + 'done\n')
    else:
        print('\tPart#' + str(partNumber) + ' failed\n')
# 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')