From 5b6ddaf9f7ee96487709cb760a212ef1564b1c83 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sun, 10 Dec 2017 09:34:36 +0000 Subject: [PATCH] Fix pretty_format_json to use int indent The indent parameter for json should be integer and under Python2 is will raise an error if not. So switch from str to int and mention default value in help text. --- pre_commit_hooks/pretty_format_json.py | 29 +++++++++----------------- tests/pretty_format_json_test.py | 16 ++++++-------- 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py index 9115077..fb1c487 100644 --- a/pre_commit_hooks/pretty_format_json.py +++ b/pre_commit_hooks/pretty_format_json.py @@ -33,24 +33,12 @@ def _autofix(filename, new_contents): f.write(new_contents) -def parse_indent(s): - # type: (str) -> str +def parse_num_to_int(s): + """Convert string numbers to int, leaving strings as is.""" try: - int_indentation_spec = int(s) + return int(s) except ValueError: - if not s.strip(): - return s - else: - raise ValueError( - 'Non-whitespace JSON indentation delimiter supplied. ', - ) - else: - if int_indentation_spec >= 0: - return int_indentation_spec * ' ' - else: - raise ValueError( - 'Negative integer supplied to construct JSON indentation delimiter. ', - ) + return s def parse_topkeys(s): @@ -68,9 +56,12 @@ def pretty_format_json(argv=None): ) parser.add_argument( '--indent', - type=parse_indent, - default=' ', - help='String used as delimiter for one indentation level', + type=parse_num_to_int, + default='2', + help=( + 'The number of indent spaces or a string to be used as delimiter' + ' for indentation level e.g. 4 or "\t" (Default: 2)' + ), ) parser.add_argument( '--no-ensure-ascii', diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py index 4054b4c..7ce7e16 100644 --- a/tests/pretty_format_json_test.py +++ b/tests/pretty_format_json_test.py @@ -3,20 +3,16 @@ import shutil import pytest from six import PY2 -from pre_commit_hooks.pretty_format_json import parse_indent +from pre_commit_hooks.pretty_format_json import parse_num_to_int from pre_commit_hooks.pretty_format_json import pretty_format_json from testing.util import get_resource_path -def test_parse_indent(): - assert parse_indent('0') == '' - assert parse_indent('2') == ' ' - assert parse_indent('\t') == '\t' - with pytest.raises(ValueError): - parse_indent('a') - with pytest.raises(ValueError): - parse_indent('-2') - +def test_parse_num_to_int(): + assert parse_num_to_int('0') == 0 + assert parse_num_to_int('2') == 2 + assert parse_num_to_int('\t') == '\t' + assert parse_num_to_int(' ') == ' ' @pytest.mark.parametrize(