forked from extern/httpie-cli
Add httpie.status
This commit is contained in:
parent
64c81fc2ec
commit
374c371ef1
@ -2,27 +2,7 @@
|
|||||||
HTTPie - a CLI, cURL-like tool for humans.
|
HTTPie - a CLI, cURL-like tool for humans.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from enum import Enum
|
|
||||||
|
|
||||||
|
|
||||||
__version__ = '2.0.0-dev'
|
__version__ = '2.0.0-dev'
|
||||||
__author__ = 'Jakub Roztocil'
|
__author__ = 'Jakub Roztocil'
|
||||||
__licence__ = 'BSD'
|
__licence__ = 'BSD'
|
||||||
|
|
||||||
|
|
||||||
class ExitStatus(Enum):
|
|
||||||
"""Program exit code constants."""
|
|
||||||
SUCCESS = 0
|
|
||||||
ERROR = 1
|
|
||||||
PLUGIN_ERROR = 7
|
|
||||||
|
|
||||||
# 128+2 SIGINT <http://www.tldp.org/LDP/abs/html/exitcodes.html>
|
|
||||||
ERROR_CTRL_C = 130
|
|
||||||
|
|
||||||
ERROR_TIMEOUT = 2
|
|
||||||
ERROR_TOO_MANY_REDIRECTS = 6
|
|
||||||
|
|
||||||
# Used only when requested with --check-status:
|
|
||||||
ERROR_HTTP_3XX = 3
|
|
||||||
ERROR_HTTP_4XX = 4
|
|
||||||
ERROR_HTTP_5XX = 5
|
|
||||||
|
@ -10,7 +10,7 @@ def main():
|
|||||||
from .core import main
|
from .core import main
|
||||||
exit_status = main()
|
exit_status = main()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
from . import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
exit_status = ExitStatus.ERROR_CTRL_C
|
exit_status = ExitStatus.ERROR_CTRL_C
|
||||||
|
|
||||||
sys.exit(exit_status.value)
|
sys.exit(exit_status.value)
|
||||||
|
@ -25,7 +25,7 @@ from httpie.sessions import DEFAULT_SESSIONS_DIR
|
|||||||
|
|
||||||
parser = HTTPieArgumentParser(
|
parser = HTTPieArgumentParser(
|
||||||
prog='http',
|
prog='http',
|
||||||
description='%s <http://httpie.org>' % __doc__.strip(),
|
description='%s <https://httpie.org>' % __doc__.strip(),
|
||||||
epilog=dedent("""
|
epilog=dedent("""
|
||||||
For every --OPTION there is also a --no-OPTION that reverts OPTION
|
For every --OPTION there is also a --no-OPTION that reverts OPTION
|
||||||
to its default value.
|
to its default value.
|
||||||
|
@ -7,7 +7,8 @@ import requests
|
|||||||
from pygments import __version__ as pygments_version
|
from pygments import __version__ as pygments_version
|
||||||
from requests import __version__ as requests_version
|
from requests import __version__ as requests_version
|
||||||
|
|
||||||
from httpie import ExitStatus, __version__ as httpie_version
|
from httpie import __version__ as httpie_version
|
||||||
|
from httpie.status import ExitStatus, http_status_to_exit_status
|
||||||
from httpie.client import collect_messages
|
from httpie.client import collect_messages
|
||||||
from httpie.context import Environment
|
from httpie.context import Environment
|
||||||
from httpie.downloads import Downloader
|
from httpie.downloads import Downloader
|
||||||
@ -154,7 +155,7 @@ def program(
|
|||||||
else:
|
else:
|
||||||
final_response = message
|
final_response = message
|
||||||
if args.check_status or downloader:
|
if args.check_status or downloader:
|
||||||
exit_status = get_exit_status(
|
exit_status = http_status_to_exit_status(
|
||||||
http_status=message.status_code,
|
http_status=message.status_code,
|
||||||
follow=args.follow
|
follow=args.follow
|
||||||
)
|
)
|
||||||
@ -193,21 +194,6 @@ def program(
|
|||||||
args.output_file.close()
|
args.output_file.close()
|
||||||
|
|
||||||
|
|
||||||
def get_exit_status(http_status: int, follow=False) -> ExitStatus:
|
|
||||||
"""Translate HTTP status code to exit status code."""
|
|
||||||
if 300 <= http_status <= 399 and not follow:
|
|
||||||
# Redirect
|
|
||||||
return ExitStatus.ERROR_HTTP_3XX
|
|
||||||
elif 400 <= http_status <= 499:
|
|
||||||
# Client Error
|
|
||||||
return ExitStatus.ERROR_HTTP_4XX
|
|
||||||
elif 500 <= http_status <= 599:
|
|
||||||
# Server Error
|
|
||||||
return ExitStatus.ERROR_HTTP_5XX
|
|
||||||
else:
|
|
||||||
return ExitStatus.SUCCESS
|
|
||||||
|
|
||||||
|
|
||||||
def print_debug_info(env: Environment):
|
def print_debug_info(env: Environment):
|
||||||
env.stderr.writelines([
|
env.stderr.writelines([
|
||||||
'HTTPie %s\n' % httpie_version,
|
'HTTPie %s\n' % httpie_version,
|
||||||
|
39
httpie/status.py
Normal file
39
httpie/status.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
class ExitStatus(Enum):
|
||||||
|
"""Program exit code constants."""
|
||||||
|
SUCCESS = 0
|
||||||
|
ERROR = 1
|
||||||
|
PLUGIN_ERROR = 7
|
||||||
|
|
||||||
|
# 128+2 SIGINT <http://www.tldp.org/LDP/abs/html/exitcodes.html>
|
||||||
|
ERROR_CTRL_C = 130
|
||||||
|
|
||||||
|
ERROR_TIMEOUT = 2
|
||||||
|
ERROR_TOO_MANY_REDIRECTS = 6
|
||||||
|
|
||||||
|
# Used only when requested with --check-status:
|
||||||
|
ERROR_HTTP_3XX = 3
|
||||||
|
ERROR_HTTP_4XX = 4
|
||||||
|
ERROR_HTTP_5XX = 5
|
||||||
|
|
||||||
|
|
||||||
|
def http_status_to_exit_status(http_status: int, follow=False) -> ExitStatus:
|
||||||
|
"""
|
||||||
|
Translate HTTP status code to exit status code.
|
||||||
|
|
||||||
|
(Relevant only when invoked with --check-status or --download.)
|
||||||
|
|
||||||
|
"""
|
||||||
|
if 300 <= http_status <= 399 and not follow:
|
||||||
|
# Redirect
|
||||||
|
return ExitStatus.ERROR_HTTP_3XX
|
||||||
|
elif 400 <= http_status <= 499:
|
||||||
|
# Client Error
|
||||||
|
return ExitStatus.ERROR_HTTP_4XX
|
||||||
|
elif 500 <= http_status <= 599:
|
||||||
|
# Server Error
|
||||||
|
return ExitStatus.ERROR_HTTP_5XX
|
||||||
|
else:
|
||||||
|
return ExitStatus.SUCCESS
|
@ -10,7 +10,7 @@ from fixtures import (
|
|||||||
FILE_CONTENT, FILE_PATH, FILE_PATH_ARG, JSON_FILE_CONTENT,
|
FILE_CONTENT, FILE_PATH, FILE_PATH_ARG, JSON_FILE_CONTENT,
|
||||||
JSON_FILE_PATH_ARG,
|
JSON_FILE_PATH_ARG,
|
||||||
)
|
)
|
||||||
from httpie import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
from httpie.cli import constants
|
from httpie.cli import constants
|
||||||
from httpie.cli.definition import parser
|
from httpie.cli.definition import parser
|
||||||
from httpie.cli.argtypes import KeyValueArg, KeyValueArgType
|
from httpie.cli.argtypes import KeyValueArg, KeyValueArgType
|
||||||
|
@ -3,7 +3,7 @@ from pytest import raises
|
|||||||
from requests import Request
|
from requests import Request
|
||||||
from requests.exceptions import ConnectionError
|
from requests.exceptions import ConnectionError
|
||||||
|
|
||||||
from httpie import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
from httpie.core import main
|
from httpie.core import main
|
||||||
from utils import HTTP_OK, http
|
from utils import HTTP_OK, http
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import mock
|
import mock
|
||||||
|
|
||||||
from httpie import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
from utils import MockEnvironment, http, HTTP_OK
|
from utils import MockEnvironment, http, HTTP_OK
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
"""High-level tests."""
|
"""High-level tests."""
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
import httpie.status
|
||||||
from httpie.cli.exceptions import ParseError
|
from httpie.cli.exceptions import ParseError
|
||||||
from utils import MockEnvironment, http, HTTP_OK
|
from utils import MockEnvironment, http, HTTP_OK
|
||||||
from fixtures import FILE_PATH, FILE_CONTENT
|
from fixtures import FILE_PATH, FILE_CONTENT
|
||||||
@ -10,19 +11,19 @@ import httpie
|
|||||||
|
|
||||||
def test_debug():
|
def test_debug():
|
||||||
r = http('--debug')
|
r = http('--debug')
|
||||||
assert r.exit_status == httpie.ExitStatus.SUCCESS
|
assert r.exit_status == httpie.status.ExitStatus.SUCCESS
|
||||||
assert 'HTTPie %s' % httpie.__version__ in r.stderr
|
assert 'HTTPie %s' % httpie.__version__ in r.stderr
|
||||||
|
|
||||||
|
|
||||||
def test_help():
|
def test_help():
|
||||||
r = http('--help', tolerate_error_exit_status=True)
|
r = http('--help', tolerate_error_exit_status=True)
|
||||||
assert r.exit_status == httpie.ExitStatus.SUCCESS
|
assert r.exit_status == httpie.status.ExitStatus.SUCCESS
|
||||||
assert 'https://github.com/jakubroztocil/httpie/issues' in r
|
assert 'https://github.com/jakubroztocil/httpie/issues' in r
|
||||||
|
|
||||||
|
|
||||||
def test_version():
|
def test_version():
|
||||||
r = http('--version', tolerate_error_exit_status=True)
|
r = http('--version', tolerate_error_exit_status=True)
|
||||||
assert r.exit_status == httpie.ExitStatus.SUCCESS
|
assert r.exit_status == httpie.status.ExitStatus.SUCCESS
|
||||||
# FIXME: py3 has version in stdout, py2 in stderr
|
# FIXME: py3 has version in stdout, py2 in stderr
|
||||||
assert httpie.__version__ == r.strip()
|
assert httpie.__version__ == r.strip()
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ from urllib.request import urlopen
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from utils import MockEnvironment, http, HTTP_OK, COLOR, CRLF
|
from utils import MockEnvironment, http, HTTP_OK, COLOR, CRLF
|
||||||
from httpie import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
from httpie.output.formatters.colors import get_lexer
|
from httpie.output.formatters.colors import get_lexer
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"""High-level tests."""
|
"""High-level tests."""
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from httpie import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
from utils import http, HTTP_OK
|
from utils import http, HTTP_OK
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import pytest
|
|||||||
import pytest_httpbin.certs
|
import pytest_httpbin.certs
|
||||||
import requests.exceptions
|
import requests.exceptions
|
||||||
|
|
||||||
from httpie import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
from httpie.cli.constants import SSL_VERSION_ARG_MAPPING
|
from httpie.cli.constants import SSL_VERSION_ARG_MAPPING
|
||||||
from utils import HTTP_OK, TESTS_ROOT, http
|
from utils import HTTP_OK, TESTS_ROOT, http
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import tempfile
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from httpie import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
from httpie.config import Config
|
from httpie.config import Config
|
||||||
from httpie.context import Environment
|
from httpie.context import Environment
|
||||||
from httpie.core import main
|
from httpie.core import main
|
||||||
|
Loading…
Reference in New Issue
Block a user