Remove pretty_format_json simplejson dependency
* The simplejson module is only needed for <=py25 so replace with builtin json.
* Replace six dependecy for simple Py2 check for convertion to unicode.
* Cleanup quotes.
diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py
index bb7a3d0..9115077 100644
--- a/pre_commit_hooks/pretty_format_json.py
+++ b/pre_commit_hooks/pretty_format_json.py
@@ -2,11 +2,11 @@
import argparse
import io
+import json
import sys
from collections import OrderedDict
-import simplejson
-import six
+from six import text_type
def _get_pretty_format(contents, indent, ensure_ascii=True, sort_keys=True, top_keys=[]):
@@ -17,18 +17,18 @@
if sort_keys:
after = sorted(after, key=lambda x: x[0])
return OrderedDict(before + after)
- return six.text_type(simplejson.dumps(
- simplejson.loads(
- contents,
- object_pairs_hook=pairs_first,
- ),
+ json_pretty = json.dumps(
+ json.loads(contents, object_pairs_hook=pairs_first),
indent=indent,
ensure_ascii=ensure_ascii,
- )) + "\n" # dumps does not end with a newline
+ separators=(',', ': '), # Workaround for https://bugs.python.org/issue16333
+ )
+ # Ensure unicode (Py2) and add the newline that dumps does not end with.
+ return text_type(json_pretty) + '\n'
def _autofix(filename, new_contents):
- print("Fixing file {}".format(filename))
+ print('Fixing file {}'.format(filename))
with io.open(filename, 'w', encoding='UTF-8') as f:
f.write(new_contents)
@@ -110,16 +110,15 @@
)
if contents != pretty_contents:
- print("File {} is not pretty-formatted".format(json_file))
+ print('File {} is not pretty-formatted'.format(json_file))
if args.autofix:
_autofix(json_file, pretty_contents)
status = 1
-
- except simplejson.JSONDecodeError:
+ except ValueError:
print(
- "Input File {} is not a valid JSON, consider using check-json"
+ 'Input File {} is not a valid JSON, consider using check-json'
.format(json_file),
)
return 1
diff --git a/setup.py b/setup.py
index ce8de14..ad14930 100644
--- a/setup.py
+++ b/setup.py
@@ -28,8 +28,6 @@
'flake8!=2.5.3',
'autopep8>=1.3',
'pyyaml',
- 'simplejson',
- 'six',
],
entry_points={
'console_scripts': [
diff --git a/tests/pretty_format_json_test.py b/tests/pretty_format_json_test.py
index eeef65b..4054b4c 100644
--- a/tests/pretty_format_json_test.py
+++ b/tests/pretty_format_json_test.py
@@ -1,6 +1,7 @@
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 pretty_format_json
@@ -17,6 +18,7 @@
parse_indent('-2')
+
@pytest.mark.parametrize(
('filename', 'expected_retval'), (
('not_pretty_formatted_json.json', 1),
@@ -43,6 +45,7 @@
assert ret == expected_retval
+@pytest.mark.skipif(PY2, reason="Requires Python3")
@pytest.mark.parametrize(
('filename', 'expected_retval'), (
('not_pretty_formatted_json.json', 1),
@@ -52,7 +55,7 @@
('tab_pretty_formatted_json.json', 0),
),
)
-def test_tab_pretty_format_json(filename, expected_retval):
+def test_tab_pretty_format_json(filename, expected_retval): # pragma: no cover
ret = pretty_format_json(['--indent', '\t', get_resource_path(filename)])
assert ret == expected_retval