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

Side by Side Diff: Source/bindings/scripts/json_import_export.py

Issue 15722005: Simple rewrite of generate-bindings.pl in Python (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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 | « Source/bindings/scripts/generate_bindings.py ('k') | Source/bindings/scripts/test/BarProp.json » ('j') | 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) 2013 Google Inc. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are
5 # met:
6 #
7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer
11 # in the documentation and/or other materials provided with the
12 # distribution.
13 # * Neither the name of Google Inc. nor the names of its
14 # contributors may be used to endorse or promote products derived from
15 # this software without specific prior written permission.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 import json
30
31
32 def strip_types(subtree):
33 """Clean up IR converted through JSON.
34
35 The Perl IDL IR consists of objects, lists, and leaves.
36 Perl's JSON.pm converts objects to dictionaries with keys type::key.
37 This strips the 'type::' and stores it in an element called TYPE.
38 """
39 if isinstance(subtree, dict):
40 new_dict = {}
41 prefix = None
42 for type_key, value in subtree.iteritems():
43 new_prefix, _, key = type_key.partition('::')
44 if prefix is None:
45 prefix = new_prefix
46 new_dict['TYPE'] = prefix
47 else:
48 if prefix != new_prefix:
49 raise ValueError('Got multiple prefixes: %s %s' % prefix, ne w_prefix)
50 new_dict[key] = strip_types(value)
51 return new_dict
52 elif isinstance(subtree, list):
53 new_list = []
54 for item in subtree:
55 new_list.append(strip_types(item))
56 return new_list
57 else:
58 return subtree
59
60
61 def none_to_empty_list(document):
62 """Replace various None values with [], so loops work properly."""
63 for interface in document['interfaces']:
64 if interface['attributes'] is None:
65 interface['attributes'] = []
66 if interface['functions'] is None:
67 interface['functions'] = []
68 else:
69 for function in interface['functions']:
70 if function['parameters'] is None:
71 function['parameters'] = []
72 return document
73
74
75 def read_json(json_filename):
76 with open(json_filename) as json_file:
77 perl_ir_as_json = json_file.read()
78 raw_dict = json.loads(perl_ir_as_json)
79 clean_dict = strip_types(raw_dict)
80 return none_to_empty_list(clean_dict)
OLDNEW
« no previous file with comments | « Source/bindings/scripts/generate_bindings.py ('k') | Source/bindings/scripts/test/BarProp.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698