diff options
Diffstat (limited to 'chromium/tools/json_schema_compiler/json_parse.py')
-rw-r--r-- | chromium/tools/json_schema_compiler/json_parse.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/chromium/tools/json_schema_compiler/json_parse.py b/chromium/tools/json_schema_compiler/json_parse.py new file mode 100644 index 00000000000..9502e91d5c2 --- /dev/null +++ b/chromium/tools/json_schema_compiler/json_parse.py @@ -0,0 +1,61 @@ +# Copyright (c) 2012 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import json +import logging +import os +import sys + +_FILE_PATH = os.path.dirname(os.path.realpath(__file__)) +_SYS_PATH = sys.path[:] +try: + _COMMENT_EATER_PATH = os.path.join( + _FILE_PATH, os.pardir, 'json_comment_eater') + sys.path.insert(0, _COMMENT_EATER_PATH) + import json_comment_eater +finally: + sys.path = _SYS_PATH + +try: + from collections import OrderedDict + + # Successfully imported, so we're running Python >= 2.7, and json.loads + # supports object_pairs_hook. + def Parse(json_str): + return json.loads(json_comment_eater.Nom(json_str), + object_pairs_hook=OrderedDict) + +except ImportError: + # Failed to import, so we're running Python < 2.7, and json.loads doesn't + # support object_pairs_hook. simplejson however does, but it's slow. + # + # TODO(cduvall/kalman): Refuse to start the docs server in this case, but + # let json-schema-compiler do its thing. + #logging.warning('Using simplejson to parse, this might be slow! Upgrade to ' + # 'Python 2.7.') + + _SYS_PATH = sys.path[:] + try: + _SIMPLE_JSON_PATH = os.path.join(_FILE_PATH, + os.pardir, + os.pardir, + 'third_party') + sys.path.insert(0, _SIMPLE_JSON_PATH) + # Add this path in case this is being used in the docs server. + sys.path.insert(0, os.path.join(_FILE_PATH, + os.pardir, + os.pardir, + 'third_party', + 'json_schema_compiler')) + import simplejson + from simplejson import OrderedDict + finally: + sys.path = _SYS_PATH + + def Parse(json_str): + return simplejson.loads(json_comment_eater.Nom(json_str), + object_pairs_hook=OrderedDict) + +def IsDict(item): + return isinstance(item, (dict, OrderedDict)) |