mirror of
https://github.com/httpie/cli.git
synced 2025-05-21 22:43:36 +02:00
Merge pull request #300 from msabramo/print_info_about_request_on_error
Print info about request on error
This commit is contained in:
commit
cbbaac13ea
@ -67,7 +67,7 @@ def decode_args(args, stdin_encoding):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def main(args=sys.argv[1:], env=Environment()):
|
def main(args=sys.argv[1:], env=Environment(), error=None):
|
||||||
"""Run the main program and write the output to ``env.stdout``.
|
"""Run the main program and write the output to ``env.stdout``.
|
||||||
|
|
||||||
Return exit status code.
|
Return exit status code.
|
||||||
@ -81,11 +81,14 @@ def main(args=sys.argv[1:], env=Environment()):
|
|||||||
if env.config.default_options:
|
if env.config.default_options:
|
||||||
args = env.config.default_options + args
|
args = env.config.default_options + args
|
||||||
|
|
||||||
def error(msg, *args, **kwargs):
|
def _error(msg, *args, **kwargs):
|
||||||
msg = msg % args
|
msg = msg % args
|
||||||
level = kwargs.get('level', 'error')
|
level = kwargs.get('level', 'error')
|
||||||
env.stderr.write('\nhttp: %s: %s\n' % (level, msg))
|
env.stderr.write('\nhttp: %s: %s\n' % (level, msg))
|
||||||
|
|
||||||
|
if error is None:
|
||||||
|
error = _error
|
||||||
|
|
||||||
debug = '--debug' in args
|
debug = '--debug' in args
|
||||||
traceback = debug or '--traceback' in args
|
traceback = debug or '--traceback' in args
|
||||||
exit_status = ExitStatus.OK
|
exit_status = ExitStatus.OK
|
||||||
@ -183,7 +186,13 @@ def main(args=sys.argv[1:], env=Environment()):
|
|||||||
# Network errors vs. bugs, etc.
|
# Network errors vs. bugs, etc.
|
||||||
if traceback:
|
if traceback:
|
||||||
raise
|
raise
|
||||||
error('%s: %s', type(e).__name__, str(e))
|
msg = str(e)
|
||||||
|
if hasattr(e, 'request'):
|
||||||
|
request = e.request
|
||||||
|
if hasattr(request, 'url'):
|
||||||
|
msg += ' while doing %s request to URL: %s' % (
|
||||||
|
request.method, request.url)
|
||||||
|
error('%s: %s', type(e).__name__, msg)
|
||||||
exit_status = ExitStatus.ERROR
|
exit_status = ExitStatus.ERROR
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
tox
|
tox
|
||||||
|
mock
|
||||||
pytest
|
pytest
|
||||||
pytest-cov
|
pytest-cov
|
||||||
pytest-httpbin>=0.0.6
|
pytest-httpbin>=0.0.6
|
||||||
|
48
tests/test_errors.py
Normal file
48
tests/test_errors.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import mock
|
||||||
|
from pytest import raises
|
||||||
|
from requests import Request, Timeout
|
||||||
|
from requests.exceptions import ConnectionError
|
||||||
|
|
||||||
|
from httpie.core import main
|
||||||
|
|
||||||
|
error_msg = None
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('httpie.core.get_response')
|
||||||
|
def test_error(get_response):
|
||||||
|
def error(msg, *args, **kwargs):
|
||||||
|
global error_msg
|
||||||
|
error_msg = msg % args
|
||||||
|
|
||||||
|
exc = ConnectionError('Connection aborted')
|
||||||
|
exc.request = Request(method='GET', url='http://www.google.com')
|
||||||
|
get_response.side_effect = exc
|
||||||
|
ret = main(['--ignore-stdin', 'www.google.com'], error=error)
|
||||||
|
assert ret == 1
|
||||||
|
assert error_msg == (
|
||||||
|
'ConnectionError: '
|
||||||
|
'Connection aborted while doing GET request to URL: '
|
||||||
|
'http://www.google.com')
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('httpie.core.get_response')
|
||||||
|
def test_error_traceback(get_response):
|
||||||
|
exc = ConnectionError('Connection aborted')
|
||||||
|
exc.request = Request(method='GET', url='http://www.google.com')
|
||||||
|
get_response.side_effect = exc
|
||||||
|
with raises(ConnectionError):
|
||||||
|
ret = main(['--ignore-stdin', '--traceback', 'www.google.com'])
|
||||||
|
|
||||||
|
|
||||||
|
@mock.patch('httpie.core.get_response')
|
||||||
|
def test_timeout(get_response):
|
||||||
|
def error(msg, *args, **kwargs):
|
||||||
|
global error_msg
|
||||||
|
error_msg = msg % args
|
||||||
|
|
||||||
|
exc = Timeout('Request timed out')
|
||||||
|
exc.request = Request(method='GET', url='http://www.google.com')
|
||||||
|
get_response.side_effect = exc
|
||||||
|
ret = main(['--ignore-stdin', 'www.google.com'], error=error)
|
||||||
|
assert ret == 2
|
||||||
|
assert error_msg == 'Request timed out (30s).'
|
Loading…
x
Reference in New Issue
Block a user