| OLD | NEW |
| 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 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 individual Requests. | 38 individual Requests. |
| 39 """ | 39 """ |
| 40 def __init__(self, | 40 def __init__(self, |
| 41 api_data_source_factory, | 41 api_data_source_factory, |
| 42 api_list_data_source_factory, | 42 api_list_data_source_factory, |
| 43 intro_data_source_factory, | 43 intro_data_source_factory, |
| 44 samples_data_source_factory, | 44 samples_data_source_factory, |
| 45 sidenav_data_source_factory, | 45 sidenav_data_source_factory, |
| 46 compiled_fs_factory, | 46 compiled_fs_factory, |
| 47 ref_resolver_factory, | 47 ref_resolver_factory, |
| 48 manifest_data_source, |
| 48 public_template_path, | 49 public_template_path, |
| 49 private_template_path, | 50 private_template_path, |
| 50 base_path): | 51 base_path): |
| 51 self._api_data_source_factory = api_data_source_factory | 52 self._api_data_source_factory = api_data_source_factory |
| 52 self._api_list_data_source_factory = api_list_data_source_factory | 53 self._api_list_data_source_factory = api_list_data_source_factory |
| 53 self._intro_data_source_factory = intro_data_source_factory | 54 self._intro_data_source_factory = intro_data_source_factory |
| 54 self._samples_data_source_factory = samples_data_source_factory | 55 self._samples_data_source_factory = samples_data_source_factory |
| 55 self._sidenav_data_source_factory = sidenav_data_source_factory | 56 self._sidenav_data_source_factory = sidenav_data_source_factory |
| 56 self._cache = compiled_fs_factory.Create(self._CreateTemplate, | 57 self._cache = compiled_fs_factory.Create(self._CreateTemplate, |
| 57 TemplateDataSource) | 58 TemplateDataSource) |
| 58 self._ref_resolver = ref_resolver_factory.Create() | 59 self._ref_resolver = ref_resolver_factory.Create() |
| 59 self._public_template_path = public_template_path | 60 self._public_template_path = public_template_path |
| 60 self._private_template_path = private_template_path | 61 self._private_template_path = private_template_path |
| 62 self._manifest_data_source = manifest_data_source |
| 61 self._base_path = base_path | 63 self._base_path = base_path |
| 62 | 64 |
| 63 def _CreateTemplate(self, template_name, text): | 65 def _CreateTemplate(self, template_name, text): |
| 64 return Handlebar(self._ref_resolver.ResolveAllLinks(text)) | 66 return Handlebar(self._ref_resolver.ResolveAllLinks(text)) |
| 65 | 67 |
| 66 def Create(self, request, path): | 68 def Create(self, request, path): |
| 67 """Returns a new TemplateDataSource bound to |request|. | 69 """Returns a new TemplateDataSource bound to |request|. |
| 68 """ | 70 """ |
| 69 return TemplateDataSource( | 71 return TemplateDataSource( |
| 70 self._api_data_source_factory.Create(request), | 72 self._api_data_source_factory.Create(request), |
| 71 self._api_list_data_source_factory.Create(), | 73 self._api_list_data_source_factory.Create(), |
| 72 self._intro_data_source_factory.Create(), | 74 self._intro_data_source_factory.Create(), |
| 73 self._samples_data_source_factory.Create(request), | 75 self._samples_data_source_factory.Create(request), |
| 74 self._sidenav_data_source_factory.Create(path), | 76 self._sidenav_data_source_factory.Create(path), |
| 75 self._cache, | 77 self._cache, |
| 78 self._manifest_data_source, |
| 76 self._public_template_path, | 79 self._public_template_path, |
| 77 self._private_template_path, | 80 self._private_template_path, |
| 78 self._base_path) | 81 self._base_path) |
| 79 | 82 |
| 80 def __init__(self, | 83 def __init__(self, |
| 81 api_data_source, | 84 api_data_source, |
| 82 api_list_data_source, | 85 api_list_data_source, |
| 83 intro_data_source, | 86 intro_data_source, |
| 84 samples_data_source, | 87 samples_data_source, |
| 85 sidenav_data_source, | 88 sidenav_data_source, |
| 86 cache, | 89 cache, |
| 90 manifest_data_source, |
| 87 public_template_path, | 91 public_template_path, |
| 88 private_template_path, | 92 private_template_path, |
| 89 base_path): | 93 base_path): |
| 90 self._api_list_data_source = api_list_data_source | 94 self._api_list_data_source = api_list_data_source |
| 91 self._intro_data_source = intro_data_source | 95 self._intro_data_source = intro_data_source |
| 92 self._samples_data_source = samples_data_source | 96 self._samples_data_source = samples_data_source |
| 93 self._api_data_source = api_data_source | 97 self._api_data_source = api_data_source |
| 94 self._sidenav_data_source = sidenav_data_source | 98 self._sidenav_data_source = sidenav_data_source |
| 95 self._cache = cache | 99 self._cache = cache |
| 96 self._public_template_path = public_template_path | 100 self._public_template_path = public_template_path |
| 97 self._private_template_path = private_template_path | 101 self._private_template_path = private_template_path |
| 102 self._manifest_data_source = manifest_data_source |
| 98 self._base_path = base_path | 103 self._base_path = base_path |
| 99 | 104 |
| 100 def Render(self, template_name): | 105 def Render(self, template_name): |
| 101 """This method will render a template named |template_name|, fetching all | 106 """This method will render a template named |template_name|, fetching all |
| 102 the partial templates needed from |self._cache|. Partials are retrieved | 107 the partial templates needed from |self._cache|. Partials are retrieved |
| 103 from the TemplateDataSource with the |get| method. | 108 from the TemplateDataSource with the |get| method. |
| 104 """ | 109 """ |
| 105 template = self.GetTemplate(self._public_template_path, template_name) | 110 template = self.GetTemplate(self._public_template_path, template_name) |
| 106 if template is None: | 111 if template is None: |
| 107 return None | 112 return None |
| 108 # TODO error handling | 113 # TODO error handling |
| 109 render_data = template.render({ | 114 render_data = template.render({ |
| 110 'api_list': self._api_list_data_source, | 115 'api_list': self._api_list_data_source, |
| 111 'apis': self._api_data_source, | 116 'apis': self._api_data_source, |
| 112 'intros': self._intro_data_source, | 117 'intros': self._intro_data_source, |
| 113 'sidenavs': self._sidenav_data_source, | 118 'sidenavs': self._sidenav_data_source, |
| 114 'partials': self, | 119 'partials': self, |
| 120 'manifest_source': self._manifest_data_source, |
| 115 'samples': self._samples_data_source, | 121 'samples': self._samples_data_source, |
| 116 'apps_samples_url': url_constants.GITHUB_BASE, | 122 'apps_samples_url': url_constants.GITHUB_BASE, |
| 117 'extensions_samples_url': url_constants.EXTENSIONS_SAMPLES, | 123 'extensions_samples_url': url_constants.EXTENSIONS_SAMPLES, |
| 118 'static': self._base_path + '/static', | 124 'static': self._base_path + '/static', |
| 119 'strings': _STRING_CONSTANTS, | 125 'strings': _STRING_CONSTANTS, |
| 120 'true': True, | 126 'true': True, |
| 121 'false': False | 127 'false': False |
| 122 }) | 128 }) |
| 123 if render_data.errors: | 129 if render_data.errors: |
| 124 logging.error('Handlebar error(s) rendering %s:\n%s' % | 130 logging.error('Handlebar error(s) rendering %s:\n%s' % |
| 125 (template_name, ' \n'.join(render_data.errors))) | 131 (template_name, ' \n'.join(render_data.errors))) |
| 126 return render_data.text | 132 return render_data.text |
| 127 | 133 |
| 128 def get(self, key): | 134 def get(self, key): |
| 129 return self.GetTemplate(self._private_template_path, key) | 135 return self.GetTemplate(self._private_template_path, key) |
| 130 | 136 |
| 131 def GetTemplate(self, base_path, template_name): | 137 def GetTemplate(self, base_path, template_name): |
| 132 try: | 138 try: |
| 133 return self._cache.GetFromFile( | 139 return self._cache.GetFromFile( |
| 134 '/'.join((base_path, FormatKey(template_name)))) | 140 '/'.join((base_path, FormatKey(template_name)))) |
| 135 except FileNotFoundError as e: | 141 except FileNotFoundError: |
| 136 return None | 142 return None |
| OLD | NEW |