Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(219)

Side by Side Diff: tools/json_schema_compiler/schema_loader.py

Issue 12522004: Lazily load extension API schemas (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/json_schema_compiler/preview.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 os
6 import sys
7
8 import idl_schema
9 import json_schema
10 from model import Model
11
12 class SchemaLoader(object):
13 '''Resolves a type name into the namespace the type belongs to.
14 '''
15 def __init__(self, api_path):
16 self._api_path = api_path
17
18 def ResolveType(self, full_name, default_namespace):
19 name_parts = full_name.rsplit('.', 1)
20 if len(name_parts) == 1:
21 if full_name not in default_namespace.types:
22 return None
23 return default_namespace
24 namespace_name, type_name = name_parts
25 real_name = None
26 for ext in ['json', 'idl']:
27 filename = '%s.%s' % (namespace_name, ext)
28 if os.path.exists(filename):
29 real_name = filename
30 break
31 if real_name is None:
32 return None
33 namespace = Model().AddNamespace(self.LoadSchema(real_name)[0],
34 os.path.join(self._api_path, real_name))
35 if type_name not in namespace.types:
36 return None
37 return namespace
38
39 def LoadSchema(self, schema):
40 schema_filename, schema_extension = os.path.splitext(schema)
41
42 if schema_extension == '.json':
43 api_defs = json_schema.Load(schema)
44 elif schema_extension == '.idl':
45 api_defs = idl_schema.Load(schema)
46 else:
47 sys.exit('Did not recognize file extension %s for schema %s' %
48 (schema_extension, schema))
49 if len(api_defs) != 1:
50 sys.exit('File %s has multiple schemas. Files are only allowed to contain'
51 'a single schema.' % schema)
52
53 return api_defs
OLDNEW
« no previous file with comments | « tools/json_schema_compiler/preview.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698