From ce261b12e68bf8a017dad7b11335e7555a270610 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Tue, 19 Feb 2019 13:05:24 -0800 Subject: [PATCH] py3: port versioned_writes Change-Id: I1095262563eff92d6d0a399eb0d5f9d3045becf3 --- swift/common/middleware/versioned_writes.py | 16 ++++++++++++---- .../common/middleware/test_versioned_writes.py | 2 +- tox.ini | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) 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 13f7baf965..994b9ff8cf 100644 --- a/tox.ini +++ b/tox.ini @@ -61,6 +61,7 @@ commands = test/unit/common/middleware/test_proxy_logging.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 \