| Index: tools/json_schema_compiler/schema_loader.py
|
| diff --git a/tools/json_schema_compiler/schema_loader.py b/tools/json_schema_compiler/schema_loader.py
|
| index aad661e357c50d4ce2b3825c0d02f938562ab9b7..648d094fa03ac9b7df1277c2138750b860fe95a4 100644
|
| --- a/tools/json_schema_compiler/schema_loader.py
|
| +++ b/tools/json_schema_compiler/schema_loader.py
|
| @@ -3,80 +3,17 @@
|
| # found in the LICENSE file.
|
|
|
| import os
|
| -import re
|
| import sys
|
|
|
| import idl_schema
|
| import json_schema
|
| -from cpp_namespace_environment import CppNamespaceEnvironment
|
| -from model import Model, UnixName
|
| -
|
| -def GenerateFilenames(full_namespace):
|
| - # Try to find the file defining the namespace. Eg. for
|
| - # nameSpace.sub_name_space.Type' the following heuristics looks for:
|
| - # 1. name_space_sub_name_space.json,
|
| - # 2. name_space_sub_name_space.idl,
|
| - # 3. sub_name_space.json,
|
| - # 4. sub_name_space.idl,
|
| - # 5. etc.
|
| - sub_namespaces = full_namespace.split('.')
|
| - filenames = [ ]
|
| - basename = None
|
| - for namespace in reversed(sub_namespaces):
|
| - if basename is not None:
|
| - basename = UnixName(namespace + '.' + basename)
|
| - else:
|
| - basename = UnixName(namespace)
|
| - for ext in ['json', 'idl']:
|
| - filenames.append('%s.%s' % (basename, ext))
|
| - return filenames
|
|
|
| class SchemaLoader(object):
|
| - '''Resolves a type name into the namespace the type belongs to.
|
| -
|
| - Properties:
|
| - - |root| path to the root directory.
|
| - - |path| path to the directory with the API header files, relative to the
|
| - root.
|
| - - |include_rules| List containing tuples with (path, cpp_namespace_pattern)
|
| - used when searching for types.
|
| - - |cpp_namespace_pattern| Default namespace pattern
|
| + '''Loads a schema from a provided filename.
|
| + |root|: path to the root directory.
|
| '''
|
| - def __init__(self,
|
| - root,
|
| - path,
|
| - include_rules,
|
| - cpp_namespace_pattern):
|
| + def __init__(self, root):
|
| self._root = root
|
| - self._include_rules = [(path, cpp_namespace_pattern)]
|
| - self._include_rules.extend(include_rules)
|
| -
|
| - def ResolveNamespace(self, full_namespace):
|
| - filenames = GenerateFilenames(full_namespace)
|
| - for path, cpp_namespace in self._include_rules:
|
| - cpp_namespace_environment = None
|
| - if cpp_namespace:
|
| - cpp_namespace_environment = CppNamespaceEnvironment(cpp_namespace)
|
| - for filename in reversed(filenames):
|
| - filepath = os.path.join(path, filename);
|
| - if os.path.exists(os.path.join(self._root, filepath)):
|
| - return Model().AddNamespace(
|
| - self.LoadSchema(filepath)[0],
|
| - filepath,
|
| - environment=cpp_namespace_environment)
|
| - return None
|
| -
|
| - def ResolveType(self, full_name, default_namespace):
|
| - name_parts = full_name.rsplit('.', 1)
|
| - if len(name_parts) == 1:
|
| - if full_name not in default_namespace.types:
|
| - return None
|
| - return default_namespace
|
| - full_namespace, type_name = full_name.rsplit('.', 1)
|
| - namespace = self.ResolveNamespace(full_namespace)
|
| - if namespace and type_name in namespace.types:
|
| - return namespace
|
| - return None
|
|
|
| def LoadSchema(self, schema):
|
| '''Load a schema definition. The schema parameter must be a file name
|
| @@ -92,4 +29,5 @@ class SchemaLoader(object):
|
| sys.exit('Did not recognize file extension %s for schema %s' %
|
| (schema_extension, schema))
|
|
|
| + # TODO(devlin): This returns a list. Does it need to? Is it ever > 1?
|
| return api_defs
|
|
|