diff --git a/moto/s3/models.py b/moto/s3/models.py index af96f0516..76cfb6b66 100644 --- a/moto/s3/models.py +++ b/moto/s3/models.py @@ -2,6 +2,7 @@ import os import base64 import datetime import hashlib +import copy from moto.core import BaseBackend from moto.core.utils import iso_8601_datetime, rfc_1123_datetime @@ -19,6 +20,12 @@ class FakeKey(object): self.last_modified = datetime.datetime.now() self._metadata = {} + def copy(self, new_name = None): + r = copy.deepcopy(self) + if new_name is not None: + r.name = new_name + return r + def set_metadata(self, key, metadata): self._metadata[key] = metadata @@ -229,6 +236,9 @@ class S3Backend(BaseBackend): dest_key_name = clean_key_name(dest_key_name) src_bucket = self.buckets[src_bucket_name] dest_bucket = self.buckets[dest_bucket_name] - dest_bucket.keys[dest_key_name] = src_bucket.keys[src_key_name] + key = src_bucket.keys[src_key_name] + if dest_key_name != src_key_name: + key = key.copy(dest_key_name) + dest_bucket.keys[dest_key_name] = key s3_backend = S3Backend()