def copyKeyMultipart(srcKey, dstBucketName, dstKeyName, headers=None):
    partSize = defaultPartSize
    s3 = boto.connect_s3()
    headers = headers or {}
    totalSize = srcKey.size

    # initiate copy
    upload = s3.get_bucket(dstBucketName).initiate_multipart_upload(dstKeyName)
    try:
        start = 0
        partIndex = itertools.count()
        while start < totalSize:
            end = min(start + partSize, totalSize)
            upload.copy_part_from_key(src_bucket_name=srcKey.bucket.name,
                                      src_key_name=srcKey.name,
                                      part_num=next(partIndex)+1,
                                      start=start,
                                      end=end-1,
                                      headers=headers)
            start += partSize
    except:
        upload.cancel_upload()
        raise
    else:
        return upload.complete_upload()
Takes (name, object) tuple, returns True if it's a non-Fab public callable.
dataset/ETHPy150Open BD2KGenomics/toil/src/toil/jobStores/aws/jobStore.py/copyKeyMultipart--crossover with--dataset/ETHPy150Open prestodb/presto-admin/prestoadmin/main.py/is_classic_task