Home | History | Annotate | Download | only in json_schema_compiler
      1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import json
      6 import os
      7 import sys
      8 
      9 _FILE_PATH = os.path.dirname(os.path.realpath(__file__))
     10 _SYS_PATH = sys.path[:]
     11 try:
     12   _COMMENT_EATER_PATH = os.path.join(
     13       _FILE_PATH, os.pardir, 'json_comment_eater')
     14   sys.path.insert(0, _COMMENT_EATER_PATH)
     15   import json_comment_eater
     16 finally:
     17   sys.path = _SYS_PATH
     18 
     19 try:
     20   from collections import OrderedDict
     21 
     22   # Successfully imported, so we're running Python >= 2.7, and json.loads
     23   # supports object_pairs_hook.
     24   def Parse(json_str):
     25     return json.loads(json_comment_eater.Nom(json_str),
     26                       object_pairs_hook=OrderedDict)
     27 
     28 except ImportError:
     29   # Failed to import, so we're running Python < 2.7, and json.loads doesn't
     30   # support object_pairs_hook. simplejson however does, but it's slow.
     31   #
     32   # TODO(cduvall/kalman): Refuse to start the docs server in this case, but
     33   # let json-schema-compiler do its thing.
     34   #logging.warning('Using simplejson to parse, this might be slow! Upgrade to '
     35   #                'Python 2.7.')
     36 
     37   _SYS_PATH = sys.path[:]
     38   try:
     39     _SIMPLE_JSON_PATH = os.path.join(_FILE_PATH,
     40                                      os.pardir,
     41                                      os.pardir,
     42                                      'third_party')
     43     sys.path.insert(0, _SIMPLE_JSON_PATH)
     44     # Add this path in case this is being used in the docs server.
     45     sys.path.insert(0, os.path.join(_FILE_PATH,
     46                                     os.pardir,
     47                                     os.pardir,
     48                                     'third_party',
     49                                     'json_schema_compiler'))
     50     import simplejson
     51     from simplejson import OrderedDict
     52   finally:
     53     sys.path = _SYS_PATH
     54 
     55   def Parse(json_str):
     56     return simplejson.loads(json_comment_eater.Nom(json_str),
     57                             object_pairs_hook=OrderedDict)
     58 
     59 
     60 def IsDict(item):
     61   return isinstance(item, (dict, OrderedDict))
     62