diff --git a/sdk/core/azure-core/HISTORY.md b/sdk/core/azure-core/HISTORY.md index 7aef0dc79e86..e0b8f4be866d 100644 --- a/sdk/core/azure-core/HISTORY.md +++ b/sdk/core/azure-core/HISTORY.md @@ -7,6 +7,7 @@ - Fixed a bug that sends None as request_id #9545 - Enable mypy for customers #9572 +- Handle TypeError in deep copy #9620 ## 1.2.1 (2020-01-14) diff --git a/sdk/core/azure-core/azure/core/pipeline/transport/_base.py b/sdk/core/azure-core/azure/core/pipeline/transport/_base.py index b9c416211f2d..82dc54fd4cc9 100644 --- a/sdk/core/azure-core/azure/core/pipeline/transport/_base.py +++ b/sdk/core/azure-core/azure/core/pipeline/transport/_base.py @@ -226,7 +226,7 @@ def __deepcopy__(self, memo=None): data = copy.deepcopy(self.body, memo) files = copy.deepcopy(self.files, memo) return HttpRequest(self.method, self.url, self.headers, files, data) - except ValueError: + except (ValueError, TypeError): return copy.copy(self) @property diff --git a/sdk/core/azure-core/tests/test_universal_pipeline.py b/sdk/core/azure-core/tests/test_universal_pipeline.py index 0093bef899b1..c82892ecd476 100644 --- a/sdk/core/azure-core/tests/test_universal_pipeline.py +++ b/sdk/core/azure-core/tests/test_universal_pipeline.py @@ -69,6 +69,19 @@ def __deepcopy__(self, memodict={}): assert request_history.http_request.url == request.url assert request_history.http_request.method == request.method +def test_request_history_type_error(): + class Non_deep_copiable(object): + def __deepcopy__(self, memodict={}): + raise TypeError() + + body = Non_deep_copiable() + request = HttpRequest('GET', 'http://127.0.0.1/', {'user-agent': 'test_request_history'}) + request.body = body + request_history = RequestHistory(request) + assert request_history.http_request.headers == request.headers + assert request_history.http_request.url == request.url + assert request_history.http_request.method == request.method + @mock.patch('azure.core.pipeline.policies._universal._LOGGER') def test_no_log(mock_http_logger): universal_request = HttpRequest('GET', 'http://127.0.0.1/')