diff --git a/CHANGELOG.md b/CHANGELOG.md index 583891b1a..89197e7b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,12 @@ # Changelog ## Unreleased -- Updated `django`, `flask`, `httplib`, `requests` and `pyramid` modules. +- Updated `django`, `flask`, `httplib`, `requests` and `pyramid` modules ([#755](https://github.com/census-instrumentation/opencensus-python/pull/755)) - Added `http code` to `grpc code` status code mapping on `utils` ([#746](https://github.com/census-instrumentation/opencensus-python/pull/746)) +- Updated `requests` module + ([#771](https://github.com/census-instrumentation/opencensus-python/pull/771)) ## 0.7.2 Released 2019-08-16 diff --git a/contrib/opencensus-ext-requests/CHANGELOG.md b/contrib/opencensus-ext-requests/CHANGELOG.md index d0ed6146d..9ffe6c8a9 100644 --- a/contrib/opencensus-ext-requests/CHANGELOG.md +++ b/contrib/opencensus-ext-requests/CHANGELOG.md @@ -5,6 +5,8 @@ ([#746](https://github.com/census-instrumentation/opencensus-python/pull/746)) - Fixed span name ([#746](https://github.com/census-instrumentation/opencensus-python/pull/746)) +- Fixed exception handling + ([#771](https://github.com/census-instrumentation/opencensus-python/pull/771)) ## 0.7.1 Released 2019-08-06 diff --git a/contrib/opencensus-ext-requests/opencensus/ext/requests/trace.py b/contrib/opencensus-ext-requests/opencensus/ext/requests/trace.py index 821c816b5..1118f57d6 100644 --- a/contrib/opencensus-ext-requests/opencensus/ext/requests/trace.py +++ b/contrib/opencensus-ext-requests/opencensus/ext/requests/trace.py @@ -105,10 +105,13 @@ def call(url, *args, **kwargs): result = requests_func(url, *args, **kwargs) except requests.Timeout: _span.set_status(exceptions_status.TIMEOUT) + raise except requests.URLRequired: _span.set_status(exceptions_status.INVALID_URL) + raise except Exception as e: _span.set_status(exceptions_status.unknown(e)) + raise else: # Add the status code to attributes _tracer.add_attribute_to_current_span( @@ -178,10 +181,13 @@ def wrap_session_request(wrapped, instance, args, kwargs): result = wrapped(*args, **kwargs) except requests.Timeout: _span.set_status(exceptions_status.TIMEOUT) + raise except requests.URLRequired: _span.set_status(exceptions_status.INVALID_URL) + raise except Exception as e: _span.set_status(exceptions_status.unknown(e)) + raise else: # Add the status code to attributes _tracer.add_attribute_to_current_span( diff --git a/contrib/opencensus-ext-requests/tests/test_requests_trace.py b/contrib/opencensus-ext-requests/tests/test_requests_trace.py index 67222c618..10554dfa5 100644 --- a/contrib/opencensus-ext-requests/tests/test_requests_trace.py +++ b/contrib/opencensus-ext-requests/tests/test_requests_trace.py @@ -242,7 +242,8 @@ def test_wrap_requests_timeout(self): url = 'http://localhost:8080/test' with patch, patch_thread: - wrapped(url) + with self.assertRaises(requests.Timeout): + wrapped(url) expected_attributes = { 'http.host': 'localhost:8080', @@ -288,7 +289,8 @@ def test_wrap_requests_invalid_url(self): url = 'http://localhost:8080/test' with patch, patch_thread: - wrapped(url) + with self.assertRaises(requests.URLRequired): + wrapped(url) expected_attributes = { 'http.host': 'localhost:8080', @@ -308,6 +310,7 @@ def test_wrap_requests_invalid_url(self): expected_status.__dict__, mock_tracer.current_span.status.__dict__ ) + self.assertRaises(requests.URLRequired, mock_func) def test_wrap_requests_exception(self): mock_return = mock.Mock() @@ -334,7 +337,8 @@ def test_wrap_requests_exception(self): url = 'http://localhost:8080/test' with patch, patch_thread: - wrapped(url) + with self.assertRaises(requests.TooManyRedirects): + wrapped(url) expected_attributes = { 'http.host': 'localhost:8080', @@ -354,6 +358,7 @@ def test_wrap_requests_exception(self): expected_status.__dict__, mock_tracer.current_span.status.__dict__ ) + self.assertRaises(requests.TooManyRedirects, mock_func) def test_wrap_session_request(self): wrapped = mock.Mock(return_value=mock.Mock(status_code=200)) @@ -376,8 +381,10 @@ def test_wrap_session_request(self): kwargs = {} with patch, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), kwargs) + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), kwargs + ) expected_attributes = { 'http.host': 'localhost:8080', @@ -427,8 +434,10 @@ def wrapped(*args, **kwargs): request_method = 'POST' with patch_tracer, patch_attr, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), {}) + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), {} + ) expected_name = '/' self.assertEqual(expected_name, mock_tracer.current_span.name) @@ -458,8 +467,11 @@ def wrapped(*args, **kwargs): request_method = 'POST' with patch_tracer, patch_attr, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), {}) + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), {} + ) + self.assertEqual(None, mock_tracer.current_span) def test_wrap_session_request_exporter_thread(self): @@ -487,8 +499,11 @@ def wrapped(*args, **kwargs): request_method = 'POST' with patch_tracer, patch_attr, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), {}) + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), {} + ) + self.assertEqual(None, mock_tracer.current_span) def test_header_is_passed_in(self): @@ -511,8 +526,10 @@ def test_header_is_passed_in(self): kwargs = {} with patch, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), kwargs) + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), kwargs + ) self.assertEqual(kwargs['headers']['x-trace'], 'some-value') @@ -536,8 +553,10 @@ def test_headers_are_preserved(self): kwargs = {'headers': {'key': 'value'}} with patch, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), kwargs) + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), kwargs + ) self.assertEqual(kwargs['headers']['key'], 'value') self.assertEqual(kwargs['headers']['x-trace'], 'some-value') @@ -563,8 +582,10 @@ def test_tracer_headers_are_overwritten(self): kwargs = {'headers': {'x-trace': 'original-value'}} with patch, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), kwargs) + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), kwargs + ) self.assertEqual(kwargs['headers']['x-trace'], 'some-value') @@ -590,8 +611,11 @@ def test_wrap_session_request_timeout(self): kwargs = {} with patch, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), kwargs) + with self.assertRaises(requests.Timeout): + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), kwargs + ) expected_attributes = { 'http.host': 'localhost:8080', @@ -635,8 +659,11 @@ def test_wrap_session_request_invalid_url(self): kwargs = {} with patch, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), kwargs) + with self.assertRaises(requests.URLRequired): + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), kwargs + ) expected_attributes = { 'http.host': 'localhost:8080', @@ -680,8 +707,11 @@ def test_wrap_session_request_exception(self): kwargs = {} with patch, patch_thread: - trace.wrap_session_request(wrapped, 'Session.request', - (request_method, url), kwargs) + with self.assertRaises(requests.TooManyRedirects): + trace.wrap_session_request( + wrapped, 'Session.request', + (request_method, url), kwargs + ) expected_attributes = { 'http.host': 'localhost:8080',