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

Side by Side Diff: chrome/common/extensions/docs/server2/handlebar_dict_generator.py

Issue 10689117: Extensions Docs Server: Support APIs with properties (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Storage API looking good Created 8 years, 5 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
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import copy 5 import copy
6 import logging 6 import logging
7 import os 7 import os
8 8
9 import third_party.json_schema_compiler.model as model 9 import third_party.json_schema_compiler.model as model
10 10
(...skipping 16 matching lines...) Expand all
27 text = '.'.join(terms[1:]) 27 text = '.'.join(terms[1:])
28 href = terms[0] + '.html' + '#type-' + text 28 href = terms[0] + '.html' + '#type-' + text
29 else: 29 else:
30 href = namespace_name + '.html' + '#type-' +ref_type 30 href = namespace_name + '.html' + '#type-' +ref_type
31 text = ref_type 31 text = ref_type
32 return ({ 32 return ({
33 "href": href, 33 "href": href,
34 "text": text 34 "text": text
35 }) 35 })
36 36
37 def _FormatValue(value):
38 s = str(value)
39 return ('<code>%s</code>' %
not at google - send to devlin 2012/07/09 11:01:20 All HTML should be the concern of the templates, n
cduvall 2012/07/09 17:50:40 Done.
40 ','.join([s[max(0, i - 3):i] for i in range(len(s), 0, -3)][::-1]))
not at google - send to devlin 2012/07/09 11:01:20 wow this is voodoo...
41
37 class HandlebarDictGenerator(object): 42 class HandlebarDictGenerator(object):
38 """Uses a Model from the JSON Schema Compiler and generates a dict that 43 """Uses a Model from the JSON Schema Compiler and generates a dict that
39 a Handlebar template can use for a data source. 44 a Handlebar template can use for a data source.
40 """ 45 """
41 def __init__(self, json): 46 def __init__(self, json):
42 clean_json = copy.deepcopy(json) 47 clean_json = copy.deepcopy(json)
43 _RemoveNoDocs(clean_json) 48 _RemoveNoDocs(clean_json)
44 try: 49 try:
45 self._namespace = model.Namespace(clean_json, clean_json['namespace']) 50 self._namespace = model.Namespace(clean_json, clean_json['namespace'])
46 except Exception as e: 51 except Exception as e:
47 logging.info(e) 52 logging.info(e)
48 53
49 def Generate(self): 54 def Generate(self):
50 try: 55 try:
51 return { 56 return {
52 'name': self._namespace.name, 57 'name': self._namespace.name,
53 'types': self._GenerateTypes(self._namespace.types), 58 'types': self._GenerateTypes(self._namespace.types),
54 'functions': self._GenerateFunctions(self._namespace.functions) 59 'functions': self._GenerateFunctions(self._namespace.functions),
60 'properties': self._GenerateProperties(self._namespace.properties)
55 } 61 }
56 except Exception as e: 62 except Exception as e:
57 logging.info(e) 63 logging.info(e)
58 64
59 def _GenerateTypes(self, types): 65 def _GenerateTypes(self, types):
60 types_list = [] 66 types_list = []
61 for type_name in types: 67 for type_name in types:
62 types_list.append(self._GenerateType(types[type_name])) 68 types_list.append(self._GenerateType(types[type_name]))
63 return types_list 69 return types_list
64 70
(...skipping 26 matching lines...) Expand all
91 function_dict['parameters'].append(function_dict['callback']) 97 function_dict['parameters'].append(function_dict['callback'])
92 if len(function_dict['parameters']) > 0: 98 if len(function_dict['parameters']) > 0:
93 function_dict['parameters'][-1]['last_item'] = True 99 function_dict['parameters'][-1]['last_item'] = True
94 return function_dict 100 return function_dict
95 101
96 def _GenerateCallback(self, callback): 102 def _GenerateCallback(self, callback):
97 if not callback: 103 if not callback:
98 return {} 104 return {}
99 callback_dict = { 105 callback_dict = {
100 'name': 'callback', 106 'name': 'callback',
107 'description': callback.description,
101 'simple_type': {'type': 'function'}, 108 'simple_type': {'type': 'function'},
102 'optional': callback.optional, 109 'optional': callback.optional,
103 'parameters': [] 110 'parameters': []
104 } 111 }
105 for param in callback.params: 112 for param in callback.params:
106 callback_dict['parameters'].append(self._GenerateProperty(param)) 113 callback_dict['parameters'].append(self._GenerateProperty(param))
107 if (len(callback_dict['parameters']) > 0): 114 if (len(callback_dict['parameters']) > 0):
108 callback_dict['parameters'][-1]['last_parameter'] = True 115 callback_dict['parameters'][-1]['last_parameter'] = True
109 return callback_dict 116 return callback_dict
110 117
111 def _GenerateProperties(self, properties): 118 def _GenerateProperties(self, properties):
112 properties_list = [] 119 properties_list = []
113 for property_name in properties: 120 for property_name in properties:
114 properties_list.append(self._GenerateProperty(properties[property_name])) 121 properties_list.append(self._GenerateProperty(properties[property_name]))
115 return properties_list 122 return properties_list
116 123
117 def _GenerateProperty(self, property_): 124 def _GenerateProperty(self, property_):
118 property_dict = { 125 property_dict = {
119 'name': property_.name, 126 'name': property_.name,
120 'optional': property_.optional, 127 'optional': property_.optional,
121 'description': property_.description, 128 'description': property_.description,
122 'properties': self._GenerateProperties(property_.properties) 129 'properties': self._GenerateProperties(property_.properties),
130 'functions': self._GenerateFunctions(property_.functions)
123 } 131 }
124 self._RenderTypeInformation(property_, property_dict) 132 self._RenderTypeInformation(property_, property_dict)
133 self._RenderValue(property_.value, property_dict)
125 return property_dict 134 return property_dict
126 135
136 def _RenderValue(self, value, dst_dict):
137 if 'simple_type' in dst_dict and isinstance(value, int):
138 dst_dict['simple_type']['type'] = _FormatValue(value)
not at google - send to devlin 2012/07/09 11:01:20 I think just incorporate this into _RenderTypeInfo
cduvall 2012/07/09 17:50:40 Done.
139
127 def _RenderTypeInformation(self, property_, dst_dict): 140 def _RenderTypeInformation(self, property_, dst_dict):
128 dst_dict['type'] = property_.type_.name.lower() 141 dst_dict['type'] = property_.type_.name.lower()
129 if property_.type_ == model.PropertyType.CHOICES: 142 if property_.type_ == model.PropertyType.CHOICES:
not at google - send to devlin 2012/07/09 11:01:20 here: if property_.has_value: if isinstance(pro
cduvall 2012/07/09 17:50:40 Done.
130 dst_dict['choices'] = [] 143 dst_dict['choices'] = []
131 for choice_name in property_.choices: 144 for choice_name in property_.choices:
132 dst_dict['choices'].append(self._GenerateProperty( 145 dst_dict['choices'].append(self._GenerateProperty(
133 property_.choices[choice_name])) 146 property_.choices[choice_name]))
134 # We keep track of which is last for knowing when to add "or" between 147 # We keep track of which is last for knowing when to add "or" between
135 # choices in templates. 148 # choices in templates.
136 if len(dst_dict['choices']) > 0: 149 if len(dst_dict['choices']) > 0:
137 dst_dict['choices'][-1]['last_choice'] = True 150 dst_dict['choices'][-1]['last_choice'] = True
138 elif property_.type_ == model.PropertyType.REF: 151 elif property_.type_ == model.PropertyType.REF:
139 dst_dict['link'] = _GetLinkToRefType(self._namespace.name, 152 dst_dict['link'] = _GetLinkToRefType(self._namespace.name,
140 property_.ref_type) 153 property_.ref_type)
141 elif property_.type_ == model.PropertyType.ARRAY: 154 elif property_.type_ == model.PropertyType.ARRAY:
142 dst_dict['array'] = self._GenerateProperty(property_.item_type) 155 dst_dict['array'] = self._GenerateProperty(property_.item_type)
143 else: 156 else:
144 dst_dict['simple_type'] = {'type': dst_dict['type']} 157 dst_dict['simple_type'] = {'type': dst_dict['type']}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698