mirror of
https://github.com/httpie/cli.git
synced 2025-02-02 18:59:18 +01:00
Fix displaying of status code without a status message. (#1301)
Co-authored-by: Jakub Roztocil <jakub@roztocil.co>
This commit is contained in:
parent
6f77e144e4
commit
25bd817bb2
@ -6,8 +6,10 @@ This project adheres to [Semantic Versioning](https://semver.org/).
|
|||||||
## [3.0.3.dev0](https://github.com/httpie/httpie/compare/3.0.2...HEAD) (Unreleased)
|
## [3.0.3.dev0](https://github.com/httpie/httpie/compare/3.0.2...HEAD) (Unreleased)
|
||||||
|
|
||||||
- Fixed escaping of integer indexes with multiple backslashes in the nested JSON builder. ([#1285](https://github.com/httpie/httpie/issues/1285))
|
- Fixed escaping of integer indexes with multiple backslashes in the nested JSON builder. ([#1285](https://github.com/httpie/httpie/issues/1285))
|
||||||
|
- Fixed displaying of status code without a status message on non-`auto` themes. ([#1300](https://github.com/httpie/httpie/issues/1300))
|
||||||
- Improved regulation of top-level arrays. ([#1292](https://github.com/httpie/httpie/commit/225dccb2186f14f871695b6c4e0bfbcdb2e3aa28))
|
- Improved regulation of top-level arrays. ([#1292](https://github.com/httpie/httpie/commit/225dccb2186f14f871695b6c4e0bfbcdb2e3aa28))
|
||||||
|
|
||||||
|
|
||||||
## [3.0.2](https://github.com/httpie/httpie/compare/3.0.1...3.0.2) (2022-01-24)
|
## [3.0.2](https://github.com/httpie/httpie/compare/3.0.1...3.0.2) (2022-01-24)
|
||||||
|
|
||||||
[What’s new in HTTPie for Terminal 3.0 →](https://httpie.io/blog/httpie-3.0.0)
|
[What’s new in HTTPie for Terminal 3.0 →](https://httpie.io/blog/httpie-3.0.0)
|
||||||
|
@ -2,7 +2,7 @@ import re
|
|||||||
import pygments
|
import pygments
|
||||||
from httpie.output.lexers.common import precise
|
from httpie.output.lexers.common import precise
|
||||||
|
|
||||||
RE_STATUS_LINE = re.compile(r'(\d{3})( +)(.+)')
|
RE_STATUS_LINE = re.compile(r'(\d{3})( +)?(.+)?')
|
||||||
|
|
||||||
STATUS_TYPES = {
|
STATUS_TYPES = {
|
||||||
'1': pygments.token.Number.HTTP.INFO,
|
'1': pygments.token.Number.HTTP.INFO,
|
||||||
|
@ -17,10 +17,15 @@ from httpie.cli.argtypes import (
|
|||||||
)
|
)
|
||||||
from httpie.cli.definition import parser
|
from httpie.cli.definition import parser
|
||||||
from httpie.encoding import UTF8
|
from httpie.encoding import UTF8
|
||||||
from httpie.output.formatters.colors import get_lexer, PIE_STYLE_NAMES
|
from httpie.output.formatters.colors import get_lexer, PIE_STYLE_NAMES, BUNDLED_STYLES
|
||||||
from httpie.status import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
from .fixtures import XML_DATA_RAW, XML_DATA_FORMATTED
|
from .fixtures import XML_DATA_RAW, XML_DATA_FORMATTED
|
||||||
from .utils import COLOR, CRLF, HTTP_OK, MockEnvironment, http, DUMMY_URL
|
from .utils import COLOR, CRLF, HTTP_OK, MockEnvironment, http, DUMMY_URL, strip_colors
|
||||||
|
|
||||||
|
|
||||||
|
# For ensuring test reproducibility, avoid using the unsorted
|
||||||
|
# BUNDLED_STYLES set.
|
||||||
|
SORTED_BUNDLED_STYLES = sorted(BUNDLED_STYLES)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('stdout_isatty', [True, False])
|
@pytest.mark.parametrize('stdout_isatty', [True, False])
|
||||||
@ -234,6 +239,24 @@ def test_ensure_meta_is_colored(httpbin, style):
|
|||||||
assert COLOR in r
|
assert COLOR in r
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('style', SORTED_BUNDLED_STYLES)
|
||||||
|
@pytest.mark.parametrize('msg', [
|
||||||
|
'',
|
||||||
|
' ',
|
||||||
|
' OK',
|
||||||
|
' OK ',
|
||||||
|
' CUSTOM ',
|
||||||
|
])
|
||||||
|
def test_ensure_status_code_is_shown_on_all_themes(http_server, style, msg):
|
||||||
|
env = MockEnvironment(colors=256)
|
||||||
|
r = http('--style', style,
|
||||||
|
http_server + '/status/msg',
|
||||||
|
'--raw', msg, env=env)
|
||||||
|
|
||||||
|
# Trailing space is stripped away.
|
||||||
|
assert 'HTTP/1.0 200' + msg.rstrip() in strip_colors(r)
|
||||||
|
|
||||||
|
|
||||||
class TestPrettyOptions:
|
class TestPrettyOptions:
|
||||||
"""Test the --pretty handling."""
|
"""Test the --pretty handling."""
|
||||||
|
|
||||||
|
@ -27,6 +27,8 @@ HTTPBIN_WITH_CHUNKED_SUPPORT = 'http://' + HTTPBIN_WITH_CHUNKED_SUPPORT_DOMAIN
|
|||||||
TESTS_ROOT = Path(__file__).parent.parent
|
TESTS_ROOT = Path(__file__).parent.parent
|
||||||
CRLF = '\r\n'
|
CRLF = '\r\n'
|
||||||
COLOR = '\x1b['
|
COLOR = '\x1b['
|
||||||
|
COLOR_RE = re.compile(r'\x1b\[\d+(;\d+)*?m', re.MULTILINE)
|
||||||
|
|
||||||
HTTP_OK = '200 OK'
|
HTTP_OK = '200 OK'
|
||||||
# noinspection GrazieInspection
|
# noinspection GrazieInspection
|
||||||
HTTP_OK_COLOR = (
|
HTTP_OK_COLOR = (
|
||||||
@ -38,6 +40,10 @@ HTTP_OK_COLOR = (
|
|||||||
DUMMY_URL = 'http://this-should.never-resolve' # Note: URL never fetched
|
DUMMY_URL = 'http://this-should.never-resolve' # Note: URL never fetched
|
||||||
|
|
||||||
|
|
||||||
|
def strip_colors(colorized_msg: str) -> str:
|
||||||
|
return COLOR_RE.sub('', colorized_msg)
|
||||||
|
|
||||||
|
|
||||||
def mk_config_dir() -> Path:
|
def mk_config_dir() -> Path:
|
||||||
dirname = tempfile.mkdtemp(prefix='httpie_config_')
|
dirname = tempfile.mkdtemp(prefix='httpie_config_')
|
||||||
return Path(dirname)
|
return Path(dirname)
|
||||||
|
@ -18,14 +18,17 @@ class TestHandler(BaseHTTPRequestHandler):
|
|||||||
return func
|
return func
|
||||||
return inner
|
return inner
|
||||||
|
|
||||||
def do_GET(self):
|
def do_generic(self):
|
||||||
parse_result = urlparse(self.path)
|
parse_result = urlparse(self.path)
|
||||||
func = self.handlers['GET'].get(parse_result.path)
|
func = self.handlers[self.command].get(parse_result.path)
|
||||||
if func is None:
|
if func is None:
|
||||||
return self.send_error(HTTPStatus.NOT_FOUND)
|
return self.send_error(HTTPStatus.NOT_FOUND)
|
||||||
|
|
||||||
return func(self)
|
return func(self)
|
||||||
|
|
||||||
|
do_GET = do_generic
|
||||||
|
do_POST = do_generic
|
||||||
|
|
||||||
|
|
||||||
@TestHandler.handler('GET', '/headers')
|
@TestHandler.handler('GET', '/headers')
|
||||||
def get_headers(handler):
|
def get_headers(handler):
|
||||||
@ -73,6 +76,15 @@ def random_encoding(handler):
|
|||||||
handler.wfile.write('0\r\n\r\n'.encode('utf-8'))
|
handler.wfile.write('0\r\n\r\n'.encode('utf-8'))
|
||||||
|
|
||||||
|
|
||||||
|
@TestHandler.handler('POST', '/status/msg')
|
||||||
|
def status_custom_msg(handler):
|
||||||
|
content_len = int(handler.headers.get('content-length', 0))
|
||||||
|
post_body = handler.rfile.read(content_len).decode()
|
||||||
|
|
||||||
|
handler.send_response(200, post_body)
|
||||||
|
handler.end_headers()
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
def http_server():
|
def http_server():
|
||||||
"""A custom HTTP server implementation for our tests, that is
|
"""A custom HTTP server implementation for our tests, that is
|
||||||
|
Loading…
Reference in New Issue
Block a user