def copy_blob(self, container_name, blob_name, copy_source,<EOL>metadata=None,<EOL>source_if_modified_since=None,<EOL>source_if_unmodified_since=None,<EOL>source_if_match=None, source_if_none_match=None,<EOL>destination_if_modified_since=None,<EOL>destination_if_unmodified_since=None,<EOL>destination_if_match=None,<EOL>destination_if_none_match=None,<EOL>destination_lease_id=None,<EOL>source_lease_id=None, timeout=None):
_validate_not_none('<STR_LIT>', container_name)<EOL>_validate_not_none('<STR_LIT>', blob_name)<EOL>_validate_not_none('<STR_LIT>', copy_source)<EOL>if copy_source.startswith('<STR_LIT:/>'):<EOL><INDENT>account, _, source =copy_source.partition('<STR_LIT:/>')[<NUM_LIT:2>].partition('<STR_LIT:/>')<EOL>copy_source = self.protocol + '<STR_LIT>' +self.primary_endpoint + '<STR_LIT:/>' + source<EOL><DEDENT>request = HTTPRequest()<EOL>request.method = '<STR_LIT>'<EOL>request.host = self._get_host()<EOL>request.path = _get_path(container_name, blob_name)<EOL>request.query = [('<STR_LIT>', _int_to_str(timeout))]<EOL>request.headers = [<EOL>('<STR_LIT>', _to_str(copy_source)),<EOL>('<STR_LIT>', metadata),<EOL>('<STR_LIT>',<EOL>_to_str(source_if_modified_since)),<EOL>('<STR_LIT>',<EOL>_to_str(source_if_unmodified_since)),<EOL>('<STR_LIT>', _to_str(source_if_match)),<EOL>('<STR_LIT>',<EOL>_to_str(source_if_none_match)),<EOL>('<STR_LIT>', _datetime_to_utc_string(destination_if_modified_since)),<EOL>('<STR_LIT>', _datetime_to_utc_string(destination_if_unmodified_since)),<EOL>('<STR_LIT>', _to_str(destination_if_match)),<EOL>('<STR_LIT>', _to_str(destination_if_none_match)),<EOL>('<STR_LIT>', _to_str(destination_lease_id)),<EOL>('<STR_LIT>', _to_str(source_lease_id))<EOL>]<EOL>response = self._perform_request(request)<EOL>props = _parse_properties(response, BlobProperties)<EOL>return props.copy<EOL>
Copies a blob to a destination within the storage account.
The source for a Copy Blob operation can be a committed blob 
or an Azure file in any Azure storage account.

:param str container_name:
    Name of existing container.
:param str blob_name:
    Name of existing blob.
:param str copy_source:
    URL up to 2 KB in length that specifies a blob. A source blob in
    the same account can be private, but a blob in another account
    must be public or accept credentials included in this URL, such as
    a Shared Access Signature. Examples:
    https://myaccount.blob.core.windows.net/mycontainer/myblob
    https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=<DateTime>
:param metadata:
    Dict containing name and value pairs.
:type metadata: A dict mapping str to str.
:param datetime source_if_modified_since:
    A DateTime value. Azure expects the date value passed in to be UTC.
    If timezone is included, any non-UTC datetimes will be converted to UTC.
    If a date is passed in without timezone info, it is assumed to be UTC.  
    Specify this conditional header to copy the blob only if the source
    blob has been modified since the specified date/time.
:param datetime source_if_unmodified_since:
    A DateTime value. Azure expects the date value passed in to be UTC.
    If timezone is included, any non-UTC datetimes will be converted to UTC.
    If a date is passed in without timezone info, it is assumed to be UTC.
    Specify this conditional header to copy the blob only if the source blob
    has not been modified since the specified date/time.
:param ETag source_if_match:
    An ETag value, or the wildcard character (*). Specify this conditional
    header to copy the source blob only if its ETag matches the value
    specified. If the ETag values do not match, the Blob service returns
    status code 412 (Precondition Failed). This header cannot be specified
    if the source is an Azure File.
:param ETag source_if_none_match:
    An ETag value, or the wildcard character (*). Specify this conditional
    header to copy the blob only if its ETag does not match the value
    specified. If the values are identical, the Blob service returns status
    code 412 (Precondition Failed). This header cannot be specified if the
    source is an Azure File.
:param datetime destination_if_modified_since:
    A DateTime value. Azure expects the date value passed in to be UTC.
    If timezone is included, any non-UTC datetimes will be converted to UTC.
    If a date is passed in without timezone info, it is assumed to be UTC.
    Specify this conditional header to copy the blob only
    if the destination blob has been modified since the specified date/time.
    If the destination blob has not been modified, the Blob service returns
    status code 412 (Precondition Failed).
:param datetime destination_if_unmodified_since:
    A DateTime value. Azure expects the date value passed in to be UTC.
    If timezone is included, any non-UTC datetimes will be converted to UTC.
    If a date is passed in without timezone info, it is assumed to be UTC. 
    Specify this conditional header to copy the blob only
    if the destination blob has not been modified since the specified
    date/time. If the destination blob has been modified, the Blob service
    returns status code 412 (Precondition Failed).
:param ETag destination_if_match:
    An ETag value, or the wildcard character (*). Specify an ETag value for
    this conditional header to copy the blob only if the specified ETag value
    matches the ETag value for an existing destination blob. If the ETag for
    the destination blob does not match the ETag specified for If-Match, the
    Blob service returns status code 412 (Precondition Failed).
:param ETag destination_if_none_match:
    An ETag value, or the wildcard character (*). Specify an ETag value for
    this conditional header to copy the blob only if the specified ETag value
    does not match the ETag value for the destination blob. Specify the wildcard
    character (*) to perform the operation only if the destination blob does not
    exist. If the specified condition isn't met, the Blob service returns status
    code 412 (Precondition Failed).
:param str destination_lease_id:
    The lease ID specified for this header must match the lease ID of the
    destination blob. If the request does not include the lease ID or it is not
    valid, the operation fails with status code 412 (Precondition Failed).
:param str source_lease_id:
    Specify this to perform the Copy Blob operation only if
    the lease ID given matches the active lease ID of the source blob.
:param int timeout:
    The timeout parameter is expressed in seconds.
:return: Copy operation properties such as status, source, and ID.
:rtype: :class:`~azure.storage.blob.models.CopyProperties`