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

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

Issue 656673003: Docserver: Cache the samples. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 6 years, 2 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 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 json 5 import json
6 import logging 6 import logging
7 import posixpath 7 import posixpath
8 import re 8 import re
9 9
10 from extensions_paths import EXAMPLES 10 from extensions_paths import EXAMPLES
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 self._text_cache = compiled_fs_factory.ForUnicode(self._samples_fs) 51 self._text_cache = compiled_fs_factory.ForUnicode(self._samples_fs)
52 self._reference_resolver = reference_resolver 52 self._reference_resolver = reference_resolver
53 self._base_path = base_path 53 self._base_path = base_path
54 self._platform = platform 54 self._platform = platform
55 55
56 def GetCache(self): 56 def GetCache(self):
57 return self._samples_cache 57 return self._samples_cache
58 58
59 def FilterSamples(self, api_name): 59 def FilterSamples(self, api_name):
60 '''Fetches and filters the list of samples for this platform, returning 60 '''Fetches and filters the list of samples for this platform, returning
61 only the samples that use the API |api_name|. 61 a Future to the only the samples that use the API |api_name|.
62 ''' 62 '''
63 try: 63 def filter_samples(samples_list):
64 return [sample for sample in samples_list
65 if any(call['name'].startswith(api_name + '.')
66 for call in sample['api_calls'])]
67 def handle_error(_):
64 # TODO(rockot): This cache is probably not working as intended, since 68 # TODO(rockot): This cache is probably not working as intended, since
65 # it can still lead to underlying filesystem (e.g. gitiles) access 69 # it can still lead to underlying filesystem (e.g. gitiles) access
66 # while processing live requests. Because this can fail, we at least 70 # while processing live requests. Because this can fail, we at least
67 # trap and log exceptions to prevent 500s from being thrown. 71 # trap and log exceptions to prevent 500s from being thrown.
68 samples_list = self._samples_cache.GetFromFileListing(
69 '' if self._platform == 'apps' else EXAMPLES).Get()
70 except Exception as e:
71 logging.warning('Unable to get samples listing. Skipping.') 72 logging.warning('Unable to get samples listing. Skipping.')
72 samples_list = [] 73 return []
73 74 platform_for_samples = '' if self._platform == 'apps' else EXAMPLES
74 return [sample for sample in samples_list if any( 75 return (self._samples_cache.GetFromFileListing(platform_for_samples)
75 call['name'].startswith(api_name + '.') 76 .Then(filter_samples, error_handler=handle_error))
76 for call in sample['api_calls'])]
77 77
78 def _GetDataFromManifest(self, path, file_system): 78 def _GetDataFromManifest(self, path, file_system):
79 manifest = self._text_cache.GetFromFile(path + '/manifest.json').Get() 79 manifest = self._text_cache.GetFromFile(path + '/manifest.json').Get()
80 try: 80 try:
81 manifest_json = json.loads(json_comment_eater.Nom(manifest)) 81 manifest_json = json.loads(json_comment_eater.Nom(manifest))
82 except ValueError as e: 82 except ValueError as e:
83 logging.error('Error parsing manifest.json for %s: %s' % (path, e)) 83 logging.error('Error parsing manifest.json for %s: %s' % (path, e))
84 return None 84 return None
85 l10n_data = { 85 l10n_data = {
86 'name': manifest_json.get('name', ''), 86 'name': manifest_json.get('name', ''),
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 manifest_data.update({ 170 manifest_data.update({
171 'icon': icon_path, 171 'icon': icon_path,
172 'download_url': download_url, 172 'download_url': download_url,
173 'url': url, 173 'url': url,
174 'files': [f.replace(sample_path + '/', '') for f in sample_files], 174 'files': [f.replace(sample_path + '/', '') for f in sample_files],
175 'api_calls': api_calls 175 'api_calls': api_calls
176 }) 176 })
177 samples_list.append(manifest_data) 177 samples_list.append(manifest_data)
178 178
179 return samples_list 179 return samples_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698