'Copy another part of this MultiPart Upload.
:type src_bucket_name: string
:param src_bucket_name: Name of the bucket containing the source key
:type src_key_name: string
:param src_key_name: Name of the source key
:type part_num: int
:param part_num: The number of this part.
:type start: int
:param start: Zero-based byte offset to start copying from
:type end: int
:param end: Zero-based byte offset to copy to
:type src_version_id: string
:param src_version_id: version_id of source object to copy from
:type headers: dict
:param headers: Any headers to pass along in the request'

def copy_part_from_key(self, src_bucket_name, src_key_name, part_num, start=None, end=None, src_version_id=None, headers=None):

    if (part_num < 1):
        raise ValueError('Part    numbers    must    be    greater    than    zero')
    query_args = ('uploadId=%s&partNumber=%d' % (self.id, part_num))
    if ((start is not None) and (end is not None)):
        rng = ('bytes=%s-%s' % (start, end))
        provider = self.bucket.connection.provider
        if (headers is None):
            headers = {}
        else:
            headers = headers.copy()
        headers[provider.copy_source_range_header] = rng
    return self.bucket.copy_key(self.key_name, src_bucket_name, src_key_name, src_version_id=src_version_id, storage_class=None, headers=headers, query_args=query_args)
