'Change the storage class of an existing key.
Depending on whether a different destination bucket is supplied
or not, this will either move the item within the bucket, preserving
all metadata and ACL info bucket changing the storage class or it
will copy the item to the provided destination bucket, also
preserving metadata and ACL info.
:type new_storage_class: string
:param new_storage_class: The new storage class for the Key.
Possible values are:
* STANDARD
* REDUCED_REDUNDANCY
:type dst_bucket: string
:param dst_bucket: The name of a destination bucket.  If not
provided the current bucket of the key will be used.
:type validate_dst_bucket: bool
:param validate_dst_bucket: If True, will validate the dst_bucket
by using an extra list request.'

def change_storage_class(self, new_storage_class, dst_bucket=None, validate_dst_bucket=True):

    bucket_name = (dst_bucket or self.bucket.name)
    if (new_storage_class == 'STANDARD'):
        return self.copy(bucket_name, self.name, reduced_redundancy=False, preserve_acl=True, validate_dst_bucket=validate_dst_bucket)
    elif (new_storage_class == 'REDUCED_REDUNDANCY'):
        return self.copy(bucket_name, self.name, reduced_redundancy=True, preserve_acl=True, validate_dst_bucket=validate_dst_bucket)
    else:
        raise BotoClientError(('Invalid    storage    class:    %s' % new_storage_class))
