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

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

Issue 15091002: Lazily load API schemas from resource files and convert all APIs to features (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix chromeos tests Created 7 years, 6 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/cpp_bundle_generator.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
1 #! /usr/bin/env python 1 #! /usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import itertools 6 import itertools
7 import json 7 import json
8 import os.path 8 import os.path
9 import re 9 import re
10 import sys 10 import sys
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 result[property_name] = True 302 result[property_name] = True
303 return result 303 return result
304 304
305 305
306 class Namespace(object): 306 class Namespace(object):
307 ''' 307 '''
308 Given an IDLNode representing an IDL namespace, converts into a Python 308 Given an IDLNode representing an IDL namespace, converts into a Python
309 dictionary that the JSON schema compiler expects to see. 309 dictionary that the JSON schema compiler expects to see.
310 ''' 310 '''
311 311
312 def __init__(self, namespace_node, nodoc=False, permissions=None, 312 def __init__(self, namespace_node, nodoc=False, internal=False):
313 internal=False):
314 self.namespace = namespace_node 313 self.namespace = namespace_node
315 self.nodoc = nodoc 314 self.nodoc = nodoc
316 self.internal = internal 315 self.internal = internal
317 self.events = [] 316 self.events = []
318 self.functions = [] 317 self.functions = []
319 self.types = [] 318 self.types = []
320 self.callbacks = OrderedDict() 319 self.callbacks = OrderedDict()
321 self.permissions = permissions or []
322 320
323 def process(self): 321 def process(self):
324 for node in self.namespace.children: 322 for node in self.namespace.children:
325 if node.cls == 'Dictionary': 323 if node.cls == 'Dictionary':
326 self.types.append(Dictionary(node).process(self.callbacks)) 324 self.types.append(Dictionary(node).process(self.callbacks))
327 elif node.cls == 'Callback': 325 elif node.cls == 'Callback':
328 k, v = Member(node).process(self.callbacks) 326 k, v = Member(node).process(self.callbacks)
329 self.callbacks[k] = v 327 self.callbacks[k] = v
330 elif node.cls == 'Interface' and node.GetName() == 'Functions': 328 elif node.cls == 'Interface' and node.GetName() == 'Functions':
331 self.functions = self.process_interface(node) 329 self.functions = self.process_interface(node)
332 elif node.cls == 'Interface' and node.GetName() == 'Events': 330 elif node.cls == 'Interface' and node.GetName() == 'Events':
333 self.events = self.process_interface(node) 331 self.events = self.process_interface(node)
334 elif node.cls == 'Enum': 332 elif node.cls == 'Enum':
335 self.types.append(Enum(node).process(self.callbacks)) 333 self.types.append(Enum(node).process(self.callbacks))
336 else: 334 else:
337 sys.exit('Did not process %s %s' % (node.cls, node)) 335 sys.exit('Did not process %s %s' % (node.cls, node))
338 return {'namespace': self.namespace.GetName(), 336 return {'namespace': self.namespace.GetName(),
339 'nodoc': self.nodoc, 337 'nodoc': self.nodoc,
340 'documentation_permissions_required': self.permissions,
341 'types': self.types, 338 'types': self.types,
342 'functions': self.functions, 339 'functions': self.functions,
343 'internal': self.internal, 340 'internal': self.internal,
344 'events': self.events} 341 'events': self.events}
345 342
346 def process_interface(self, node): 343 def process_interface(self, node):
347 members = [] 344 members = []
348 for member in node.children: 345 for member in node.children:
349 if member.cls == 'Member': 346 if member.cls == 'Member':
350 name, properties = Member(member).process(self.callbacks) 347 name, properties = Member(member).process(self.callbacks)
351 members.append(properties) 348 members.append(properties)
352 return members 349 return members
353 350
354 class IDLSchema(object): 351 class IDLSchema(object):
355 ''' 352 '''
356 Given a list of IDLNodes and IDLAttributes, converts into a Python list 353 Given a list of IDLNodes and IDLAttributes, converts into a Python list
357 of api_defs that the JSON schema compiler expects to see. 354 of api_defs that the JSON schema compiler expects to see.
358 ''' 355 '''
359 356
360 def __init__(self, idl): 357 def __init__(self, idl):
361 self.idl = idl 358 self.idl = idl
362 359
363 def process(self): 360 def process(self):
364 namespaces = [] 361 namespaces = []
365 nodoc = False 362 nodoc = False
366 internal = False 363 internal = False
367 permissions = None
368 for node in self.idl: 364 for node in self.idl:
369 if node.cls == 'Namespace': 365 if node.cls == 'Namespace':
370 namespace = Namespace(node, nodoc, permissions, internal) 366 namespace = Namespace(node, nodoc, internal)
371 namespaces.append(namespace.process()) 367 namespaces.append(namespace.process())
372 nodoc = False 368 nodoc = False
373 internal = False 369 internal = False
374 elif node.cls == 'Copyright': 370 elif node.cls == 'Copyright':
375 continue 371 continue
376 elif node.cls == 'Comment': 372 elif node.cls == 'Comment':
377 continue 373 continue
378 elif node.cls == 'ExtAttribute': 374 elif node.cls == 'ExtAttribute':
379 if node.name == 'nodoc': 375 if node.name == 'nodoc':
380 nodoc = bool(node.value) 376 nodoc = bool(node.value)
381 elif node.name == 'permissions':
382 permission = node.value.split(',')
383 elif node.name == 'internal': 377 elif node.name == 'internal':
384 internal = bool(node.value) 378 internal = bool(node.value)
385 else: 379 else:
386 continue 380 continue
387 else: 381 else:
388 sys.exit('Did not process %s %s' % (node.cls, node)) 382 sys.exit('Did not process %s %s' % (node.cls, node))
389 return namespaces 383 return namespaces
390 384
391 def Load(filename): 385 def Load(filename):
392 ''' 386 '''
(...skipping 13 matching lines...) Expand all
406 ''' 400 '''
407 Dump a json serialization of parse result for the IDL files whose names 401 Dump a json serialization of parse result for the IDL files whose names
408 were passed in on the command line. 402 were passed in on the command line.
409 ''' 403 '''
410 for filename in sys.argv[1:]: 404 for filename in sys.argv[1:]:
411 schema = Load(filename) 405 schema = Load(filename)
412 print json.dumps(schema, indent=2) 406 print json.dumps(schema, indent=2)
413 407
414 if __name__ == '__main__': 408 if __name__ == '__main__':
415 Main() 409 Main()
OLDNEW
« no previous file with comments | « tools/json_schema_compiler/cpp_bundle_generator.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698