From ac5abddb6ff48e3cafb31a51ba39abf5ab93e698 Mon Sep 17 00:00:00 2001 From: Cyril Roelandt Date: Sun, 20 Jan 2019 00:35:17 +0100 Subject: [PATCH] Fix some types in the FS and VMware drivers The _get_datadir_path_and_priority and _parse_datastore_info_and_weight methods may return the priority (or weight) as an integer or a string. This causes a few issues: - the caller must cast the result to an integer - the code is harder to read - static checkers such as mypy have a hard time processing these methods We make sure that both methods now return the priority as an integer. Closes-Bug: #1813092 Change-Id: I9435c88560b01737f9310fe2cba1ca4c84e0f3fa --- glance_store/_drivers/filesystem.py | 7 ++++--- glance_store/_drivers/vmware_datastore.py | 7 ++++--- glance_store/tests/unit/test_multistore_vmware.py | 2 +- glance_store/tests/unit/test_vmware_store.py | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/glance_store/_drivers/filesystem.py b/glance_store/_drivers/filesystem.py index 8e8481c4..f9c3e476 100644 --- a/glance_store/_drivers/filesystem.py +++ b/glance_store/_drivers/filesystem.py @@ -436,7 +436,7 @@ class Store(glance_store.driver.Store): (datadir_path, priority) = self._get_datadir_path_and_priority(datadir) priority_paths = self.priority_data_map.setdefault( - int(priority), []) + priority, []) self._check_directory_paths(datadir_path, directory_paths, priority_paths) directory_paths.add(datadir_path) @@ -490,8 +490,9 @@ class Store(glance_store.driver.Store): parts = [part.strip() for part in datadir.rsplit(":", 1)] datadir_path = parts[0] if len(parts) == 2 and parts[1]: - priority = parts[1] - if not priority.isdigit(): + try: + priority = int(parts[1]) + except ValueError: msg = (_("Invalid priority value %(priority)s in " "filesystem configuration") % {'priority': priority}) LOG.exception(msg) diff --git a/glance_store/_drivers/vmware_datastore.py b/glance_store/_drivers/vmware_datastore.py index ef6f1c06..76a9edda 100644 --- a/glance_store/_drivers/vmware_datastore.py +++ b/glance_store/_drivers/vmware_datastore.py @@ -463,8 +463,9 @@ class Store(glance_store.Store): raise exceptions.BadStoreConfiguration( store_name='vmware_datastore', reason=msg) if len(parts) == 3 and parts[2]: - weight = parts[2] - if not weight.isdigit(): + try: + weight = int(parts[2]) + except ValueError: msg = (_('Invalid weight value %(weight)s in ' 'vmware_datastores configuration') % {'weight': weight}) @@ -501,7 +502,7 @@ class Store(glance_store.Store): LOG.error(msg) raise exceptions.BadStoreConfiguration( store_name='vmware_datastore', reason=msg) - ds_map.setdefault(int(weight), []).append(ds_obj) + ds_map.setdefault(weight, []).append(ds_obj) return ds_map def configure_add(self): diff --git a/glance_store/tests/unit/test_multistore_vmware.py b/glance_store/tests/unit/test_multistore_vmware.py index e5c95d7e..e88b53a7 100644 --- a/glance_store/tests/unit/test_multistore_vmware.py +++ b/glance_store/tests/unit/test_multistore_vmware.py @@ -391,7 +391,7 @@ class TestMultiStore(base.MultiStoreBaseTest, parts = self.store._parse_datastore_info_and_weight(datastore) self.assertEqual('a', parts[0]) self.assertEqual('b', parts[1]) - self.assertEqual('100', parts[2]) + self.assertEqual(100, parts[2]) def test_parse_datastore_info_and_weight_default_weight(self): datastore = 'a:b' diff --git a/glance_store/tests/unit/test_vmware_store.py b/glance_store/tests/unit/test_vmware_store.py index 93d1a282..661a25c6 100644 --- a/glance_store/tests/unit/test_vmware_store.py +++ b/glance_store/tests/unit/test_vmware_store.py @@ -396,7 +396,7 @@ class TestStore(base.StoreBaseTest, parts = self.store._parse_datastore_info_and_weight(datastore) self.assertEqual('a', parts[0]) self.assertEqual('b', parts[1]) - self.assertEqual('100', parts[2]) + self.assertEqual(100, parts[2]) def test_parse_datastore_info_and_weight_default_weight(self): datastore = 'a:b'