From 700b18ed0e48952155ee65a01b0214e5f45b9dc4 Mon Sep 17 00:00:00 2001 From: mattclegg Date: Thu, 14 Apr 2016 09:30:42 +0100 Subject: [PATCH] Use OrderedDict to preserve order --- .travis.yml | 4 +++- pre_commit_hooks/pretty_format_json.py | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6a0aaa0..94b6262 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,9 @@ env: # These should match the tox env list - TOXENV=py34 - TOXENV=pypy - TOXENV=pypy3 -install: pip install coveralls tox +install: + - if [[ $TOXENV == py26 ]]; then pip install ordereddict; fi + - pip install coveralls tox script: tox # Special snowflake. Our tests depend on making real commits. before_install: diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py index 1d601fa..ae6dfe8 100644 --- a/pre_commit_hooks/pretty_format_json.py +++ b/pre_commit_hooks/pretty_format_json.py @@ -3,13 +3,21 @@ from __future__ import print_function import argparse import sys +# Versions older than Python 2.6 will need to install ordereddict, +# but newer versions will import from the built-in collections module. +try: + from collections import OrderedDict +except ImportError: + from ordereddict import OrderedDict + import simplejson -def _get_pretty_format(contents, indent, no_sort_keys): +def _get_pretty_format(contents, indent, sort_keys=True): return simplejson.dumps( - simplejson.loads(contents), - sort_keys=no_sort_keys, + simplejson.loads(contents, + object_pairs_hook=None if sort_keys else OrderedDict), + sort_keys=sort_keys, indent=indent ) + "\n" # dumps don't end with a newline @@ -39,7 +47,7 @@ def pretty_format_json(argv=None): action='store_true', dest='no_sort_keys', default=False, - help='Do not sort the keys' + help='Keep JSON nodes in the same order' ) parser.add_argument('filenames', nargs='*', help='Filenames to fix')