12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import json 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import os 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import sys 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)_FILE_PATH = os.path.dirname(os.path.realpath(__file__)) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)_SYS_PATH = sys.path[:] 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)try: 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) _COMMENT_EATER_PATH = os.path.join( 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) _FILE_PATH, os.pardir, 'json_comment_eater') 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sys.path.insert(0, _COMMENT_EATER_PATH) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) import json_comment_eater 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)finally: 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sys.path = _SYS_PATH 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)try: 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) from collections import OrderedDict 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Successfully imported, so we're running Python >= 2.7, and json.loads 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # supports object_pairs_hook. 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def Parse(json_str): 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return json.loads(json_comment_eater.Nom(json_str), 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) object_pairs_hook=OrderedDict) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)except ImportError: 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Failed to import, so we're running Python < 2.7, and json.loads doesn't 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # support object_pairs_hook. simplejson however does, but it's slow. 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # TODO(cduvall/kalman): Refuse to start the docs server in this case, but 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # let json-schema-compiler do its thing. 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) #logging.warning('Using simplejson to parse, this might be slow! Upgrade to ' 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # 'Python 2.7.') 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) _SYS_PATH = sys.path[:] 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) try: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) _SIMPLE_JSON_PATH = os.path.join(_FILE_PATH, 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) os.pardir, 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) os.pardir, 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'third_party') 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sys.path.insert(0, _SIMPLE_JSON_PATH) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Add this path in case this is being used in the docs server. 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sys.path.insert(0, os.path.join(_FILE_PATH, 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) os.pardir, 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) os.pardir, 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'third_party', 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'json_schema_compiler')) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) import simplejson 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) from simplejson import OrderedDict 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) finally: 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sys.path = _SYS_PATH 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def Parse(json_str): 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return simplejson.loads(json_comment_eater.Nom(json_str), 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) object_pairs_hook=OrderedDict) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)def IsDict(item): 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return isinstance(item, (dict, OrderedDict)) 62