From 0ee28be6dbbe777f16bb4e1f3c585b70908e9628 Mon Sep 17 00:00:00 2001 From: Kieran Brantner-Magee Date: Wed, 2 Sep 2020 15:36:28 -0700 Subject: [PATCH 1/3] mode parameter needs better exception behavior, as if it is mis-typed now it will return an AttributeError further down the stack without useful guidance (and only does so when creating the handler, as well) Will now return a TypeError at initialization. --- .../azure/servicebus/_common/receiver_mixins.py | 4 ++++ sdk/servicebus/azure-servicebus/tests/test_queues.py | 10 +++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sdk/servicebus/azure-servicebus/azure/servicebus/_common/receiver_mixins.py b/sdk/servicebus/azure-servicebus/azure/servicebus/_common/receiver_mixins.py index 2a767e4795a6..6447a3c7bd5b 100644 --- a/sdk/servicebus/azure-servicebus/azure/servicebus/_common/receiver_mixins.py +++ b/sdk/servicebus/azure-servicebus/azure/servicebus/_common/receiver_mixins.py @@ -33,6 +33,10 @@ def _populate_attributes(self, **kwargs): self._auth_uri = "sb://{}/{}".format(self.fully_qualified_namespace, self.entity_path) self._entity_uri = "amqps://{}/{}".format(self.fully_qualified_namespace, self.entity_path) self._mode = kwargs.get("mode", ReceiveSettleMode.PeekLock) + # While we try to leave failures to the service, in this case the errors lower down the stack are less clear. + if not isinstance(self._mode, ReceiveSettleMode): + raise TypeError("Parameter 'mode' must be of type ReceiveSettleMode") + self._error_policy = _ServiceBusErrorPolicy( max_retries=self._config.retry_total ) diff --git a/sdk/servicebus/azure-servicebus/tests/test_queues.py b/sdk/servicebus/azure-servicebus/tests/test_queues.py index c17e4e9b00a9..bf212caf9849 100644 --- a/sdk/servicebus/azure-servicebus/tests/test_queues.py +++ b/sdk/servicebus/azure-servicebus/tests/test_queues.py @@ -1852,8 +1852,8 @@ def test_queue_receiver_invalid_mode(self, servicebus_namespace_connection_strin with ServiceBusClient.from_connection_string( servicebus_namespace_connection_string, logging_enable=False) as sb_client: -# with pytest.raises(StopIteration): - with sb_client.get_queue_receiver(servicebus_queue.name, - max_wait_time="oij") as receiver: - - assert receiver + with pytest.raises(TypeError): + with sb_client.get_queue_receiver(servicebus_queue.name, + mode=2) as receiver: + + raise Exception("Should not get here, should fail fast.") From 2eb7d6377d86d9e804513ab1dca8b9586a99ba28 Mon Sep 17 00:00:00 2001 From: Kieran Brantner-Magee Date: Fri, 18 Sep 2020 00:50:50 -0700 Subject: [PATCH 2/3] Fix mode->receive_mode change missed in merge (within test) --- sdk/servicebus/azure-servicebus/tests/test_queues.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/servicebus/azure-servicebus/tests/test_queues.py b/sdk/servicebus/azure-servicebus/tests/test_queues.py index 7ce485ae5af3..c84909654b64 100644 --- a/sdk/servicebus/azure-servicebus/tests/test_queues.py +++ b/sdk/servicebus/azure-servicebus/tests/test_queues.py @@ -1859,7 +1859,7 @@ def test_queue_receiver_invalid_mode(self, servicebus_namespace_connection_strin servicebus_namespace_connection_string, logging_enable=False) as sb_client: with pytest.raises(TypeError): with sb_client.get_queue_receiver(servicebus_queue.name, - mode=2) as receiver: + receive_mode=2) as receiver: raise Exception("Should not get here, should fail fast.") From fc246ea281f8121afab303da71cc07bc3c8b4633 Mon Sep 17 00:00:00 2001 From: KieranBrantnerMagee Date: Mon, 21 Sep 2020 12:05:02 -0700 Subject: [PATCH 3/3] Update CHANGELOG.md Add note of AttributeError->TypeError behavior for receive_mode misalignment to changelog. --- sdk/servicebus/azure-servicebus/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/servicebus/azure-servicebus/CHANGELOG.md b/sdk/servicebus/azure-servicebus/CHANGELOG.md index 5e9f5001b5e1..a3415ad1f9da 100644 --- a/sdk/servicebus/azure-servicebus/CHANGELOG.md +++ b/sdk/servicebus/azure-servicebus/CHANGELOG.md @@ -2,6 +2,8 @@ ## 7.0.0b7 (Unreleased) +**Breaking Changes** +* Passing any type other than `ReceiveMode` as parameter `receive_mode` now throws a `TypeError` instead of `AttributeError`. ## 7.0.0b6 (2020-09-10)