docs: def copy_file(self, share_name, directory_name, file_name, copy_source,
                    metadata=None, timeout=None):
          '''
          Copies a blob or file to a destination file within the storage account. 
  
          :param str share_name:
              Name of existing share.
          :param str directory_name:
              The path to the directory.
          :param str file_name:
              Name of existing file.
          :param str copy_source:
              Specifies the URL of the source blob or file, up to 2 KB in length. 
              A source file in the same account can be private, but a file in another account
              must be public or accept credentials included in this URL, such as
              a Shared Access Signature. Examples:
              https://myaccount.file.core.windows.net/myshare/mydirectory/myfile
          :param metadata:
              Dict containing name, value pairs.
          :type metadata: A dict mapping str to str.
          :param int timeout:
              The timeout parameter is expressed in seconds.
          :return: Copy operation properties such as status, source, and ID.
          :rtype: :class:`~azure.storage.file.models.CopyProperties`
          '''
          _validate_not_none('share_name', share_name)
          _validate_not_none('file_name', file_name)
          _validate_not_none('copy_source', copy_source)
  
          request = HTTPRequest()
          request.method = 'PUT'
          request.host = self._get_host()
          request.path = _get_path(share_name, directory_name, file_name)
          request.query = [('timeout', _int_to_str(timeout))]
          request.headers = [
              ('x-ms-copy-source', _to_str(copy_source)),
              ('x-ms-meta-name-values', metadata),
          ]
  
          response = self._perform_request(request)
          props = _parse_properties(response, FileProperties)
          return props.copy