| 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 import os | 6 import os |
| 7 from StringIO import StringIO | 7 from StringIO import StringIO |
| 8 | 8 |
| 9 from appengine_wrappers import webapp | 9 from appengine_wrappers import webapp |
| 10 from appengine_wrappers import memcache | 10 from appengine_wrappers import memcache |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 self.headers = {} | 90 self.headers = {} |
| 91 self.path = path | 91 self.path = path |
| 92 self.url = '//localhost/%s' % path | 92 self.url = '//localhost/%s' % path |
| 93 | 93 |
| 94 channel = path.split('/')[-1] | 94 channel = path.split('/')[-1] |
| 95 logging.info('cron/%s: starting' % channel) | 95 logging.info('cron/%s: starting' % channel) |
| 96 | 96 |
| 97 server_instance = ServerInstance.GetOrCreateOnline(channel) | 97 server_instance = ServerInstance.GetOrCreateOnline(channel) |
| 98 | 98 |
| 99 def run_cron_for_dir(d, path_prefix=''): | 99 def run_cron_for_dir(d, path_prefix=''): |
| 100 error = None | 100 success = True |
| 101 start_time = time.time() | 101 start_time = time.time() |
| 102 files = [f for f in server_instance.content_cache.GetFromFileListing(d) | 102 files = [f for f in server_instance.content_cache.GetFromFileListing(d) |
| 103 if not f.endswith('/')] | 103 if not f.endswith('/')] |
| 104 for f in files: | 104 for f in files: |
| 105 error = None |
| 105 path = '%s%s' % (path_prefix, f) | 106 path = '%s%s' % (path_prefix, f) |
| 106 try: | 107 try: |
| 107 response = MockResponse() | 108 response = MockResponse() |
| 108 server_instance.Get(path, MockRequest(path), response) | 109 server_instance.Get(path, MockRequest(path), response) |
| 109 if response.status != 200: | 110 if response.status != 200: |
| 110 error = 'Got %s response' % response.status | 111 error = 'Got %s response' % response.status |
| 111 except error: | 112 except error: |
| 112 pass | 113 pass |
| 113 if error: | 114 if error: |
| 114 logging.error('cron/%s: error rendering %s: %s' % ( | 115 logging.error('cron/%s: error rendering %s: %s' % ( |
| 115 channel, path, error)) | 116 channel, path, error)) |
| 117 success = False |
| 116 logging.info('cron/%s: rendering %s files took %s seconds' % ( | 118 logging.info('cron/%s: rendering %s files took %s seconds' % ( |
| 117 channel, len(files), time.time() - start_time)) | 119 channel, len(files), time.time() - start_time)) |
| 118 return error | 120 return success |
| 119 | 121 |
| 120 # Don't use "or" since we want to evaluate everything no matter what. | 122 # Don't use "or" since we want to evaluate everything no matter what. |
| 121 was_error = any(( | 123 success = any(( |
| 124 # Note: rendering the public templates will pull in all of the private |
| 125 # templates. |
| 122 run_cron_for_dir(svn_constants.PUBLIC_TEMPLATE_PATH), | 126 run_cron_for_dir(svn_constants.PUBLIC_TEMPLATE_PATH), |
| 123 run_cron_for_dir(svn_constants.STATIC_PATH, path_prefix='static/'))) | 127 run_cron_for_dir(svn_constants.STATIC_PATH, path_prefix='static/'), |
| 128 # Note: rendering the public templates will have pulled in the .js and |
| 129 # manifest.json files (for listing examples on the API reference pages), |
| 130 # but there are still images, CSS, etc. |
| 131 run_cron_for_dir(svn_constants.EXAMPLES_PATH, |
| 132 path_prefix='extensions/examples/'))) |
| 124 | 133 |
| 125 if was_error: | 134 if success: |
| 135 self.response.status = 200 |
| 136 self.response.out.write('Success') |
| 137 else: |
| 126 self.response.status = 500 | 138 self.response.status = 500 |
| 127 self.response.out.write('Failure') | 139 self.response.out.write('Failure') |
| 128 else: | |
| 129 self.response.status = 200 | |
| 130 self.response.out.write('Success') | |
| 131 | 140 |
| 132 logging.info('cron/%s: finished' % channel) | 141 logging.info('cron/%s: finished' % channel) |
| 133 | 142 |
| 134 def _RedirectSpecialCases(self, path): | 143 def _RedirectSpecialCases(self, path): |
| 135 google_dev_url = 'http://developer.google.com/chrome' | 144 google_dev_url = 'http://developer.google.com/chrome' |
| 136 if path == '/' or path == '/index.html': | 145 if path == '/' or path == '/index.html': |
| 137 self.redirect(google_dev_url) | 146 self.redirect(google_dev_url) |
| 138 return True | 147 return True |
| 139 | 148 |
| 140 if path == '/apps.html': | 149 if path == '/apps.html': |
| (...skipping 20 matching lines...) Expand all Loading... |
| 161 if channel in path: | 170 if channel in path: |
| 162 position = path.index(channel) | 171 position = path.index(channel) |
| 163 path.pop(position) | 172 path.pop(position) |
| 164 path.insert(0, channel) | 173 path.insert(0, channel) |
| 165 new_url += '/'.join(path) | 174 new_url += '/'.join(path) |
| 166 self.redirect(new_url) | 175 self.redirect(new_url) |
| 167 return True | 176 return True |
| 168 | 177 |
| 169 def get(self): | 178 def get(self): |
| 170 path = self.request.path | 179 path = self.request.path |
| 180 |
| 181 if path in ['favicon.ico', 'robots.txt']: |
| 182 response.set_status(404) |
| 183 return |
| 184 |
| 171 if self._RedirectSpecialCases(path): | 185 if self._RedirectSpecialCases(path): |
| 172 return | 186 return |
| 173 | 187 |
| 174 if path.startswith('/cron'): | 188 if path.startswith('/cron'): |
| 175 self._HandleCron(path) | 189 self._HandleCron(path) |
| 176 return | 190 return |
| 177 | 191 |
| 178 # Redirect paths like "directory" to "directory/". This is so relative | 192 # Redirect paths like "directory" to "directory/". This is so relative |
| 179 # file paths will know to treat this as a directory. | 193 # file paths will know to treat this as a directory. |
| 180 if os.path.splitext(path)[1] == '' and path[-1] != '/': | 194 if os.path.splitext(path)[1] == '' and path[-1] != '/': |
| 181 self.redirect(path + '/') | 195 self.redirect(path + '/') |
| 182 return | 196 return |
| 183 | 197 |
| 184 path = path.strip('/') | 198 path = path.strip('/') |
| 185 if self._RedirectFromCodeDotGoogleDotCom(path): | 199 if self._RedirectFromCodeDotGoogleDotCom(path): |
| 186 return | 200 return |
| 187 | 201 |
| 188 self._HandleGet(path) | 202 self._HandleGet(path) |
| OLD | NEW |