]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Fix Python 3 issues in backup
authorVictor Stinner <vstinner@redhat.com>
Tue, 23 Jun 2015 09:20:47 +0000 (11:20 +0200)
committerVictor Stinner <vstinner@redhat.com>
Wed, 24 Jun 2015 15:11:05 +0000 (17:11 +0200)
* Replace (int, long) with six.integer_types: the "long" type has been
  removed in Python 3
* Replace str.encode("bas64") with base64.encodestring(str), base64
  text codec has been removed in Python 3. Same change for decode
  (base64.decodestring)
* On Python 3, encode JSON to UTF-8
* tox.ini: add the following tests to Python 3

  - cinder.tests.unit.test_backup
  - cinder.tests.unit.test_backup_driver_base

Blueprint cinder-python3
Change-Id: I86e04f8fbe9a3ce8849fd141dc3ee914e73c8796

cinder/backup/driver.py
cinder/quota.py
cinder/tests/unit/test_backup_driver_base.py
tox.ini

index 3317118f69d17663b765488844679520e1431ebe..622e2ef4a5216f30e432bca4d51984ffb6638288 100644 (file)
@@ -16,6 +16,7 @@
 """Base class for all backup drivers."""
 
 import abc
+import base64
 
 from oslo_config import cfg
 from oslo_log import log as logging
@@ -355,7 +356,9 @@ class BackupDriver(base.Base):
         :returns backup_url - a string describing the backup record
         """
         retval = jsonutils.dumps(backup)
-        return retval.encode("base64")
+        if six.PY3:
+            retval = retval.encode('utf-8')
+        return base64.encodestring(retval)
 
     def import_record(self, backup_url):
         """Import and verify backup record.
@@ -367,7 +370,7 @@ class BackupDriver(base.Base):
         :param backup_url: driver specific backup record string
         :returns dictionary object with database updates
         """
-        return jsonutils.loads(backup_url.decode("base64"))
+        return jsonutils.loads(base64.decodestring(backup_url))
 
 
 @six.add_metaclass(abc.ABCMeta)
index 18b31934fe4ae8f4195780cd67e356393c648f3a..6a93af8925edac36ea407e2b8670f1d674f7b698 100644 (file)
@@ -347,7 +347,7 @@ class DbQuotaDriver(object):
         # Set up the reservation expiration
         if expire is None:
             expire = CONF.reservation_expire
-        if isinstance(expire, (int, long)):
+        if isinstance(expire, six.integer_types):
             expire = datetime.timedelta(seconds=expire)
         if isinstance(expire, datetime.timedelta):
             expire = timeutils.utcnow() + expire
index f95ad9713c302f449ce64655ee89cd577d0a9f36..b19664e178a17df369f48c6f637e0c79667a0cb6 100644 (file)
@@ -14,6 +14,7 @@
 #    under the License.
 """ Tests for the backup service base driver. """
 
+import base64
 import uuid
 
 import mock
@@ -74,7 +75,7 @@ class BackupBaseDriverTestCase(test.TestCase):
 
     def test_export_record(self):
         export_string = self.driver.export_record(self.backup)
-        export_dict = jsonutils.loads(export_string.decode("base64"))
+        export_dict = jsonutils.loads(base64.decodestring(export_string))
         # Make sure we don't lose data when converting to string
         for key in _backup_db_fields:
             self.assertTrue(key in export_dict)
diff --git a/tox.ini b/tox.ini
index 44399fa41aa9c9daf95f03e2153de59da2358c92..b6e0f3994ea7976680b3b9881320aa41c5ea6069 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -30,6 +30,8 @@ downloadcache = ~/cache/pip
 commands =
   python -m testtools.run \
     cinder.tests.unit.test_api_urlmap \
+    cinder.tests.unit.test_backup \
+    cinder.tests.unit.test_backup_driver_base \
     cinder.tests.unit.test_block_device \
     cinder.tests.unit.test_cloudbyte \
     cinder.tests.unit.test_conf \