From f1c9286130bdc4d8c7b55499aafe24321fae8f9c Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Wed, 7 Oct 2020 16:55:12 -0400 Subject: [PATCH] fix: normalize / test deprecation of 'Client.reserve_ids' Closes #101 Closes #100 --- google/cloud/datastore/client.py | 10 +++---- tests/unit/test_client.py | 48 ++++++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/google/cloud/datastore/client.py b/google/cloud/datastore/client.py index 86e513a8..3d39088b 100644 --- a/google/cloud/datastore/client.py +++ b/google/cloud/datastore/client.py @@ -60,6 +60,10 @@ DISABLE_GRPC = "GOOGLE_CLOUD_DISABLE_GRPC" """Environment variable acting as flag to disable gRPC.""" +_RESERVE_IDS_DEPRECATED_MESSAGE = """\ +Client.reserve_ids is deprecated. Please use \ +Client.reserve_ids_multi or Client.reserve_ids_sequential""" + _USE_GRPC = _HAVE_GRPC and not os.getenv(DISABLE_GRPC, False) @@ -883,11 +887,7 @@ def reserve_ids(self, complete_key, num_ids, retry=None, timeout=None): Please use either :meth:`reserve_ids_multi` (recommended) or :meth:`reserve_ids_sequential`. """ - message = ( - "Client.reserve_ids is deprecated. Please use " - "Client.reserve_ids_multi or Client.reserve_ids_sequential", - ) - warnings.warn(message, DeprecationWarning) + warnings.warn(_RESERVE_IDS_DEPRECATED_MESSAGE, DeprecationWarning) return self.reserve_ids_sequential( complete_key, num_ids, retry=retry, timeout=timeout ) diff --git a/tests/unit/test_client.py b/tests/unit/test_client.py index 61f8af7b..4a529c4c 100644 --- a/tests/unit/test_client.py +++ b/tests/unit/test_client.py @@ -1058,6 +1058,8 @@ def test_reserve_ids_sequential_w_non_numeric_key_name(self): client.reserve_ids_sequential(complete_key, num_ids) def test_reserve_ids_w_completed_key(self): + import warnings + num_ids = 2 creds = _make_credentials() client = self._make_one(credentials=creds, _use_grpc=False) @@ -1067,7 +1069,8 @@ def test_reserve_ids_w_completed_key(self): client._datastore_api_internal = ds_api self.assertTrue(not complete_key.is_partial) - client.reserve_ids(complete_key, num_ids) + with warnings.catch_warnings(record=True) as warned: + client.reserve_ids(complete_key, num_ids) reserved_keys = ( _Key(_Key.kind, id) @@ -1076,7 +1079,12 @@ def test_reserve_ids_w_completed_key(self): expected_keys = [key.to_protobuf() for key in reserved_keys] reserve_ids.assert_called_once_with(self.PROJECT, expected_keys) + self.assertEqual(len(warned), 1) + self.assertIn("Client.reserve_ids is deprecated.", str(warned[0].message)) + def test_reserve_ids_w_completed_key_w_retry_w_timeout(self): + import warnings + num_ids = 2 retry = mock.Mock() timeout = 100000 @@ -1089,7 +1097,8 @@ def test_reserve_ids_w_completed_key_w_retry_w_timeout(self): ds_api = mock.Mock(reserve_ids=reserve_ids, spec=["reserve_ids"]) client._datastore_api_internal = ds_api - client.reserve_ids(complete_key, num_ids, retry=retry, timeout=timeout) + with warnings.catch_warnings(record=True) as warned: + client.reserve_ids(complete_key, num_ids, retry=retry, timeout=timeout) reserved_keys = ( _Key(_Key.kind, id) @@ -1100,7 +1109,12 @@ def test_reserve_ids_w_completed_key_w_retry_w_timeout(self): self.PROJECT, expected_keys, retry=retry, timeout=timeout ) + self.assertEqual(len(warned), 1) + self.assertIn("Client.reserve_ids is deprecated.", str(warned[0].message)) + def test_reserve_ids_w_completed_key_w_ancestor(self): + import warnings + num_ids = 2 creds = _make_credentials() client = self._make_one(credentials=creds, _use_grpc=False) @@ -1110,7 +1124,8 @@ def test_reserve_ids_w_completed_key_w_ancestor(self): client._datastore_api_internal = ds_api self.assertTrue(not complete_key.is_partial) - client.reserve_ids(complete_key, num_ids) + with warnings.catch_warnings(record=True) as warned: + client.reserve_ids(complete_key, num_ids) reserved_keys = ( _Key("PARENT", "SINGLETON", _Key.kind, id) @@ -1119,29 +1134,50 @@ def test_reserve_ids_w_completed_key_w_ancestor(self): expected_keys = [key.to_protobuf() for key in reserved_keys] reserve_ids.assert_called_once_with(self.PROJECT, expected_keys) + self.assertEqual(len(warned), 1) + self.assertIn("Client.reserve_ids is deprecated.", str(warned[0].message)) + def test_reserve_ids_w_partial_key(self): + import warnings + num_ids = 2 incomplete_key = _Key(_Key.kind, None) creds = _make_credentials() client = self._make_one(credentials=creds) with self.assertRaises(ValueError): - client.reserve_ids(incomplete_key, num_ids) + with warnings.catch_warnings(record=True) as warned: + client.reserve_ids(incomplete_key, num_ids) + + self.assertEqual(len(warned), 1) + self.assertIn("Client.reserve_ids is deprecated.", str(warned[0].message)) def test_reserve_ids_w_wrong_num_ids(self): + import warnings + num_ids = "2" complete_key = _Key() creds = _make_credentials() client = self._make_one(credentials=creds) with self.assertRaises(ValueError): - client.reserve_ids(complete_key, num_ids) + with warnings.catch_warnings(record=True) as warned: + client.reserve_ids(complete_key, num_ids) + + self.assertEqual(len(warned), 1) + self.assertIn("Client.reserve_ids is deprecated.", str(warned[0].message)) def test_reserve_ids_w_non_numeric_key_name(self): + import warnings + num_ids = 2 complete_key = _Key(_Key.kind, "batman") creds = _make_credentials() client = self._make_one(credentials=creds) with self.assertRaises(ValueError): - client.reserve_ids(complete_key, num_ids) + with warnings.catch_warnings(record=True) as warned: + client.reserve_ids(complete_key, num_ids) + + self.assertEqual(len(warned), 1) + self.assertIn("Client.reserve_ids is deprecated.", str(warned[0].message)) def test_reserve_ids_multi(self): creds = _make_credentials()