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

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

Issue 14273041: Doc server manifest page generation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: epeterson's nits Created 7 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
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 logging 5 import logging
6 6
7 from docs_server_utils import FormatKey 7 from docs_server_utils import FormatKey
8 from file_system import FileNotFoundError 8 from file_system import FileNotFoundError
9 from third_party.handlebar import Handlebar 9 from third_party.handlebar import Handlebar
10 import url_constants 10 import url_constants
11 11
12 _EXTENSIONS_URL = '/chrome/extensions' 12 _EXTENSIONS_URL = '/chrome/extensions'
13 13
14 _STRING_CONSTANTS = { 14 _STRING_CONSTANTS = {
15 'app': 'app', 15 'app': 'app',
16 'apps_title': 'Apps', 16 'apps_title': 'Apps',
17 'extension': 'extension', 17 'extension': 'extension',
18 'extensions_title': 'Extensions', 18 'extensions_title': 'Extensions',
19 'events': 'events', 19 'events': 'events',
20 'methods': 'methods', 20 'methods': 'methods',
21 'properties': 'properties', 21 'properties': 'properties',
22 } 22 }
23 23
24 # TODO-PATCH: Do I actually need this?
25 def _MakeChannelDict(channel_name):
not at google - send to devlin 2013/07/20 02:49:03 No I deleted it :)
jshumway 2013/07/22 17:16:27 Ah, oops. Was in a bit of a rush to get it up and
26 channel_dict = {
27 'channels': [{'name': name} for name in BranchUtility.GetAllChannelNames()],
28 'current': channel_name
29 }
30
31 for channel in channel_dict['channels']:
32 if channel['name'] == channel_name:
33 channel['isCurrent'] = True
34 return channel_dict
35
24 class TemplateDataSource(object): 36 class TemplateDataSource(object):
25 """Renders Handlebar templates, providing them with the context in which to 37 """Renders Handlebar templates, providing them with the context in which to
26 render. 38 render.
27 39
28 Also acts as a data source itself, providing partial Handlebar templates to 40 Also acts as a data source itself, providing partial Handlebar templates to
29 those it renders. 41 those it renders.
30 42
31 Each instance of TemplateDataSource is bound to a Request so that it can 43 Each instance of TemplateDataSource is bound to a Request so that it can
32 render templates with request-specific data (such as Accept-Language); use 44 render templates with request-specific data (such as Accept-Language); use
33 a Factory to cheaply construct these. 45 a Factory to cheaply construct these.
34 """ 46 """
35 47
36 class Factory(object): 48 class Factory(object):
37 """A factory to create lightweight TemplateDataSource instances bound to 49 """A factory to create lightweight TemplateDataSource instances bound to
38 individual Requests. 50 individual Requests.
39 """ 51 """
40 def __init__(self, 52 def __init__(self,
41 api_data_source_factory, 53 api_data_source_factory,
42 api_list_data_source_factory, 54 api_list_data_source_factory,
43 intro_data_source_factory, 55 intro_data_source_factory,
44 samples_data_source_factory, 56 samples_data_source_factory,
45 sidenav_data_source_factory, 57 sidenav_data_source_factory,
46 compiled_fs_factory, 58 compiled_fs_factory,
47 ref_resolver_factory, 59 ref_resolver_factory,
60 manifest_data_source,
48 public_template_path, 61 public_template_path,
49 private_template_path, 62 private_template_path,
50 base_path): 63 base_path):
51 self._api_data_source_factory = api_data_source_factory 64 self._api_data_source_factory = api_data_source_factory
52 self._api_list_data_source_factory = api_list_data_source_factory 65 self._api_list_data_source_factory = api_list_data_source_factory
53 self._intro_data_source_factory = intro_data_source_factory 66 self._intro_data_source_factory = intro_data_source_factory
54 self._samples_data_source_factory = samples_data_source_factory 67 self._samples_data_source_factory = samples_data_source_factory
55 self._sidenav_data_source_factory = sidenav_data_source_factory 68 self._sidenav_data_source_factory = sidenav_data_source_factory
56 self._cache = compiled_fs_factory.Create(self._CreateTemplate, 69 self._cache = compiled_fs_factory.Create(self._CreateTemplate,
57 TemplateDataSource) 70 TemplateDataSource)
58 self._ref_resolver = ref_resolver_factory.Create() 71 self._ref_resolver = ref_resolver_factory.Create()
59 self._public_template_path = public_template_path 72 self._public_template_path = public_template_path
60 self._private_template_path = private_template_path 73 self._private_template_path = private_template_path
74 self._manifest_data_source = manifest_data_source
61 self._base_path = base_path 75 self._base_path = base_path
62 76
63 def _CreateTemplate(self, template_name, text): 77 def _CreateTemplate(self, template_name, text):
64 return Handlebar(self._ref_resolver.ResolveAllLinks(text)) 78 return Handlebar(self._ref_resolver.ResolveAllLinks(text))
65 79
66 def Create(self, request, path): 80 def Create(self, request, path):
67 """Returns a new TemplateDataSource bound to |request|. 81 """Returns a new TemplateDataSource bound to |request|.
68 """ 82 """
69 return TemplateDataSource( 83 return TemplateDataSource(
70 self._api_data_source_factory.Create(request), 84 self._api_data_source_factory.Create(request),
71 self._api_list_data_source_factory.Create(), 85 self._api_list_data_source_factory.Create(),
72 self._intro_data_source_factory.Create(), 86 self._intro_data_source_factory.Create(),
73 self._samples_data_source_factory.Create(request), 87 self._samples_data_source_factory.Create(request),
74 self._sidenav_data_source_factory.Create(path), 88 self._sidenav_data_source_factory.Create(path),
75 self._cache, 89 self._cache,
90 self._manifest_data_source,
76 self._public_template_path, 91 self._public_template_path,
77 self._private_template_path, 92 self._private_template_path,
78 self._base_path) 93 self._base_path)
79 94
80 def __init__(self, 95 def __init__(self,
81 api_data_source, 96 api_data_source,
82 api_list_data_source, 97 api_list_data_source,
83 intro_data_source, 98 intro_data_source,
84 samples_data_source, 99 samples_data_source,
85 sidenav_data_source, 100 sidenav_data_source,
86 cache, 101 cache,
102 manifest_data_source,
87 public_template_path, 103 public_template_path,
88 private_template_path, 104 private_template_path,
89 base_path): 105 base_path):
90 self._api_list_data_source = api_list_data_source 106 self._api_list_data_source = api_list_data_source
91 self._intro_data_source = intro_data_source 107 self._intro_data_source = intro_data_source
92 self._samples_data_source = samples_data_source 108 self._samples_data_source = samples_data_source
93 self._api_data_source = api_data_source 109 self._api_data_source = api_data_source
94 self._sidenav_data_source = sidenav_data_source 110 self._sidenav_data_source = sidenav_data_source
95 self._cache = cache 111 self._cache = cache
96 self._public_template_path = public_template_path 112 self._public_template_path = public_template_path
97 self._private_template_path = private_template_path 113 self._private_template_path = private_template_path
114 self._manifest_data_source = manifest_data_source
98 self._base_path = base_path 115 self._base_path = base_path
99 116
100 def Render(self, template_name): 117 def Render(self, template_name):
101 """This method will render a template named |template_name|, fetching all 118 """This method will render a template named |template_name|, fetching all
102 the partial templates needed from |self._cache|. Partials are retrieved 119 the partial templates needed from |self._cache|. Partials are retrieved
103 from the TemplateDataSource with the |get| method. 120 from the TemplateDataSource with the |get| method.
104 """ 121 """
105 template = self.GetTemplate(self._public_template_path, template_name) 122 template = self.GetTemplate(self._public_template_path, template_name)
106 if template is None: 123 if template is None:
107 return None 124 return None
108 # TODO error handling 125 # TODO error handling
109 render_data = template.render({ 126 render_data = template.render({
110 'api_list': self._api_list_data_source, 127 'api_list': self._api_list_data_source,
111 'apis': self._api_data_source, 128 'apis': self._api_data_source,
112 'intros': self._intro_data_source, 129 'intros': self._intro_data_source,
113 'sidenavs': self._sidenav_data_source, 130 'sidenavs': self._sidenav_data_source,
114 'partials': self, 131 'partials': self,
132 'manifest_source': self._manifest_data_source,
115 'samples': self._samples_data_source, 133 'samples': self._samples_data_source,
116 'apps_samples_url': url_constants.GITHUB_BASE, 134 'apps_samples_url': url_constants.GITHUB_BASE,
117 'extensions_samples_url': url_constants.EXTENSIONS_SAMPLES, 135 'extensions_samples_url': url_constants.EXTENSIONS_SAMPLES,
118 'static': self._base_path + '/static', 136 'static': self._base_path + '/static',
119 'strings': _STRING_CONSTANTS, 137 'strings': _STRING_CONSTANTS,
120 'true': True, 138 'true': True,
121 'false': False 139 'false': False
122 }) 140 })
123 if render_data.errors: 141 if render_data.errors:
124 logging.error('Handlebar error(s) rendering %s:\n%s' % 142 logging.error('Handlebar error(s) rendering %s:\n%s' %
125 (template_name, ' \n'.join(render_data.errors))) 143 (template_name, ' \n'.join(render_data.errors)))
126 return render_data.text 144 return render_data.text
127 145
128 def get(self, key): 146 def get(self, key):
129 return self.GetTemplate(self._private_template_path, key) 147 return self.GetTemplate(self._private_template_path, key)
130 148
131 def GetTemplate(self, base_path, template_name): 149 def GetTemplate(self, base_path, template_name):
132 try: 150 try:
133 return self._cache.GetFromFile( 151 return self._cache.GetFromFile(
134 '/'.join((base_path, FormatKey(template_name)))) 152 '/'.join((base_path, FormatKey(template_name))))
135 except FileNotFoundError as e: 153 except FileNotFoundError:
136 return None 154 return None
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698