diff --git a/swift/common/middleware/versioned_writes.py b/swift/common/middleware/versioned_writes.py index 82218eb837..516f3f26e6 100644 --- a/swift/common/middleware/versioned_writes.py +++ b/swift/common/middleware/versioned_writes.py @@ -222,6 +222,7 @@ Disable versioning from a container (x is any value except empty):: import calendar import json +import six from six.moves.urllib.parse import quote, unquote import time @@ -596,10 +597,12 @@ class VersionedWritesContext(WSGIContext): DELETE_MARKER_CONTENT_TYPE: # Nothing to restore break - prev_obj_name = version_to_restore['name'].encode('utf-8') + obj_to_restore = version_to_restore['name'] + if six.PY2: + obj_to_restore = obj_to_restore.encode('utf-8') restored_path = self._restore_data( req, versions_cont, api_version, account_name, - container_name, object_name, prev_obj_name) + container_name, object_name, obj_to_restore) if not restored_path: continue @@ -614,9 +617,12 @@ class VersionedWritesContext(WSGIContext): # else, well, it existed long enough to do the # copy; we won't worry too much break + prev_obj_name = previous_version['name'] + if six.PY2: + prev_obj_name = prev_obj_name.encode('utf-8') marker_path = "/%s/%s/%s/%s" % ( api_version, account_name, versions_cont, - previous_version['name'].encode('utf-8')) + prev_obj_name) # done restoring, redirect the delete to the marker req = make_pre_authed_request( req.environ, path=quote(marker_path), method='DELETE', @@ -624,7 +630,9 @@ class VersionedWritesContext(WSGIContext): else: # there are older versions so copy the previous version to the # current object and delete the previous version - prev_obj_name = previous_version['name'].encode('utf-8') + prev_obj_name = previous_version['name'] + if six.PY2: + prev_obj_name = prev_obj_name.encode('utf-8') restored_path = self._restore_data( req, versions_cont, api_version, account_name, container_name, object_name, prev_obj_name) diff --git a/test/unit/common/middleware/test_versioned_writes.py b/test/unit/common/middleware/test_versioned_writes.py index ea11168bc1..c16e8d47d3 100644 --- a/test/unit/common/middleware/test_versioned_writes.py +++ b/test/unit/common/middleware/test_versioned_writes.py @@ -891,7 +891,7 @@ class VersionedWritesTestCase(VersionedWritesBaseTestCase): 'CONTENT_LENGTH': '0'}) status, headers, body = self.call_vw(req) self.assertEqual(status, '204 No Content') - self.assertEqual('', body) + self.assertEqual(b'', body) self.assertEqual(len(self.authorized), 2) req.environ['REQUEST_METHOD'] = 'PUT' diff --git a/tox.ini b/tox.ini index d10d4b9f64..da69e523bd 100644 --- a/tox.ini +++ b/tox.ini @@ -59,6 +59,7 @@ commands = test/unit/common/middleware/test_recon.py \ test/unit/common/middleware/test_subrequest_logging.py \ test/unit/common/middleware/test_tempauth.py \ + test/unit/common/middleware/test_versioned_writes.py \ test/unit/common/middleware/test_xprofile.py \ test/unit/common/ring \ test/unit/common/test_base_storage_server.py \