mirror of
https://github.com/sprockets/sprockets.mixins.http.git
synced 2024-11-15 03:00:29 +00:00
Merge pull request #22 from nvllsvm/exception_handling
Add handling of tornado.httpclient.HTTPError
This commit is contained in:
commit
8e94957c05
3 changed files with 21 additions and 10 deletions
|
@ -3,6 +3,8 @@ Version History
|
||||||
|
|
||||||
`Next Release
|
`Next Release
|
||||||
-------------
|
-------------
|
||||||
|
- Add handling of ``tornado.httpclient.HTTPTimeoutError`` and
|
||||||
|
``tornado.httpclient.HTTPStreamClosedError`` exceptions
|
||||||
- Fix documentation builds
|
- Fix documentation builds
|
||||||
- Update documentation links to readthedocs.io
|
- Update documentation links to readthedocs.io
|
||||||
|
|
||||||
|
|
|
@ -9,17 +9,12 @@ import asyncio
|
||||||
import functools
|
import functools
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import socket
|
|
||||||
import time
|
import time
|
||||||
from urllib import parse
|
from urllib import parse
|
||||||
|
|
||||||
from ietfparse import algorithms, errors, headers
|
from ietfparse import algorithms, errors, headers
|
||||||
from sprockets.mixins.mediatype import transcoders
|
from sprockets.mixins.mediatype import transcoders
|
||||||
from tornado import httpclient
|
from tornado import httpclient
|
||||||
try:
|
|
||||||
from tornado.curl_httpclient import CurlError
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
CurlError = OSError
|
|
||||||
|
|
||||||
__version__ = '2.1.0'
|
__version__ = '2.1.0'
|
||||||
|
|
||||||
|
@ -352,10 +347,7 @@ class HTTPClientMixin:
|
||||||
raise_error=False,
|
raise_error=False,
|
||||||
validate_cert=validate_cert,
|
validate_cert=validate_cert,
|
||||||
allow_nonstandard_methods=allow_nonstandard_methods)
|
allow_nonstandard_methods=allow_nonstandard_methods)
|
||||||
except (ConnectionError,
|
except (OSError, httpclient.HTTPError) as error:
|
||||||
CurlError,
|
|
||||||
OSError,
|
|
||||||
socket.gaierror) as error:
|
|
||||||
response.append_exception(error)
|
response.append_exception(error)
|
||||||
LOGGER.warning(
|
LOGGER.warning(
|
||||||
'HTTP Request Error for %s to %s attempt %i of %i: %s',
|
'HTTP Request Error for %s to %s attempt %i of %i: %s',
|
||||||
|
|
19
tests.py
19
tests.py
|
@ -219,7 +219,24 @@ class MixinTestCase(testing.AsyncHTTPTestCase):
|
||||||
self.assertIsNone(response.headers)
|
self.assertIsNone(response.headers)
|
||||||
self.assertIsNone(response.links)
|
self.assertIsNone(response.links)
|
||||||
self.assertIsNone(response.raw)
|
self.assertIsNone(response.raw)
|
||||||
self.assertTrue([isinstance(e, OSError) for e in response.exceptions])
|
for e in response.exceptions:
|
||||||
|
self.assertIsInstance(e, OSError)
|
||||||
|
|
||||||
|
@testing.gen_test
|
||||||
|
def test_tornado_httpclient_errors(self):
|
||||||
|
with mock.patch(
|
||||||
|
'tornado.httpclient.AsyncHTTPClient.fetch') as fetch:
|
||||||
|
fetch.side_effect = httpclient.HTTPError(599)
|
||||||
|
response = yield self.mixin.http_fetch(self.get_url('/test'))
|
||||||
|
self.assertFalse(response.ok)
|
||||||
|
self.assertEqual(response.code, 599)
|
||||||
|
self.assertEqual(response.attempts, 3)
|
||||||
|
self.assertIsNone(response.body)
|
||||||
|
self.assertIsNone(response.headers)
|
||||||
|
self.assertIsNone(response.links)
|
||||||
|
self.assertIsNone(response.raw)
|
||||||
|
for e in response.exceptions:
|
||||||
|
self.assertIsInstance(e, httpclient.HTTPError)
|
||||||
|
|
||||||
@testing.gen_test
|
@testing.gen_test
|
||||||
def test_without_correlation_id_behavior(self):
|
def test_without_correlation_id_behavior(self):
|
||||||
|
|
Loading…
Reference in a new issue