From f1cd289d51f01004bcfdcd9d991ca54b6a8185fb Mon Sep 17 00:00:00 2001 From: Dennis Brakhane Date: Wed, 24 Sep 2014 23:35:14 +0200 Subject: [PATCH] Fallback to JSON highlighting if subtype contains json Some JSON based formats like JSON Home Documents[1] don't use a '+json' suffix, but simply contain json in their MIME type. Also, some servers might use (outdated) types like 'application/x-json'. The JSON formatter can already handle those cases, but the highlighter was ignoring them. This commit will let the highlighter choose the JSON lexer if no other lexer could be found and the MIME subtype contains 'json' [1] http://tools.ietf.org/html/draft-nottingham-json-home-03 --- AUTHORS.rst | 1 + httpie/output/formatters/colors.py | 4 ++++ tests/test_output.py | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/AUTHORS.rst b/AUTHORS.rst index 9d445427..a066f5a4 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -31,3 +31,4 @@ Patches and ideas * `Justin Bonnar `_ * `Nathan LaFreniere `_ * `Matthias Lehmann `_ +* `Dennis Brakhane `_ diff --git a/httpie/output/formatters/colors.py b/httpie/output/formatters/colors.py index d9276d6f..667ae91a 100644 --- a/httpie/output/formatters/colors.py +++ b/httpie/output/formatters/colors.py @@ -76,6 +76,10 @@ def get_lexer(mime): '%s/%s' % (type_, subtype_name), '%s/%s' % (type_, subtype_suffix) ]) + # as a last resort, if no lexer feels responsible, and + # the subtype contains 'json', take the JSON lexer + if 'json' in subtype: + lexer_names.append('json') lexer = None for mime_type in mime_types: try: diff --git a/tests/test_output.py b/tests/test_output.py index ad2dec04..b4e2db3d 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -32,9 +32,13 @@ class TestColors: 'application/json', 'application/json+foo', 'application/foo+json', + 'application/json-foo', + 'application/x-json', 'foo/json', 'foo/json+bar', 'foo/bar+json', + 'foo/json-foo', + 'foo/x-json', ]) def test_get_lexer(self, mime): lexer = get_lexer(mime)