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

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

Issue 512453002: Docserver: Add more skip_not_found support and cache "not found"s (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 sys 5 import sys
6 6
7 import schema_util 7 import schema_util
8 from docs_server_utils import ToUnicode 8 from docs_server_utils import ToUnicode
9 from file_system import FileNotFoundError 9 from file_system import FileNotFoundError
10 from future import Future 10 from future import Future
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 assert dir_name.startswith(path) 178 assert dir_name.startswith(path)
179 files += add_prefix(dir_name[len(path):], new_files) 179 files += add_prefix(dir_name[len(path):], new_files)
180 if dirs: 180 if dirs:
181 files += self._file_system.Read(dirs).Then( 181 files += self._file_system.Read(dirs).Then(
182 lambda results: get_from_future_listing(results)).Get() 182 lambda results: get_from_future_listing(results)).Get()
183 return files 183 return files
184 184
185 return self._file_system.Read(add_prefix(path, first_layer_dirs)).Then( 185 return self._file_system.Read(add_prefix(path, first_layer_dirs)).Then(
186 lambda results: first_layer_files + get_from_future_listing(results)) 186 lambda results: first_layer_files + get_from_future_listing(results))
187 187
188 def GetFromFile(self, path): 188 def GetFromFile(self, path, skip_not_found=False):
189 '''Calls |compilation_function| on the contents of the file at |path|. If 189 '''Calls |compilation_function| on the contents of the file at |path|.
190 |binary| is True then the file will be read as binary - but this will only 190 If |skip_not_found| is True, then None is passed to |compilation_function|.
191 apply for the first time the file is fetched; if already cached, |binary|
192 will be ignored.
193 ''' 191 '''
194 AssertIsFile(path) 192 AssertIsFile(path)
195 193
196 try: 194 try:
197 version = self._file_system.Stat(path).version 195 version = self._file_system.Stat(path).version
198 except FileNotFoundError: 196 except FileNotFoundError:
199 return Future(exc_info=sys.exc_info()) 197 if skip_not_found:
198 version = None
199 else:
200 return Future(exc_info=sys.exc_info())
200 201
201 cache_entry = self._file_object_store.Get(path).Get() 202 cache_entry = self._file_object_store.Get(path).Get()
202 if (cache_entry is not None) and (version == cache_entry.version): 203 if (cache_entry is not None) and (version == cache_entry.version):
203 return Future(value=cache_entry._cache_data) 204 return Future(value=cache_entry._cache_data)
204 205
205 def next(files): 206 def compile_(files):
206 cache_data = self._compilation_function(path, files) 207 cache_data = self._compilation_function(path, files)
207 self._file_object_store.Set(path, _CacheEntry(cache_data, version)) 208 self._file_object_store.Set(path, _CacheEntry(cache_data, version))
208 return cache_data 209 return cache_data
209 return self._file_system.ReadSingle(path).Then(next) 210 return self._file_system.ReadSingle(
211 path, skip_not_found=skip_not_found).Then(compile_)
210 212
211 def GetFromFileListing(self, path): 213 def GetFromFileListing(self, path):
212 '''Calls |compilation_function| on the listing of the files at |path|. 214 '''Calls |compilation_function| on the listing of the files at |path|.
213 Assumes that the path given is to a directory. 215 Assumes that the path given is to a directory.
214 ''' 216 '''
215 AssertIsDirectory(path) 217 AssertIsDirectory(path)
216 218
217 try: 219 try:
218 version = self._file_system.Stat(path).version 220 version = self._file_system.Stat(path).version
219 except FileNotFoundError: 221 except FileNotFoundError:
(...skipping 20 matching lines...) Expand all
240 cache_entry = self._list_object_store.Get(path).Get() 242 cache_entry = self._list_object_store.Get(path).Get()
241 if cache_entry is not None: 243 if cache_entry is not None:
242 return cache_entry.version 244 return cache_entry.version
243 return self._file_system.Stat(path).version 245 return self._file_system.Stat(path).version
244 246
245 def FileExists(self, path): 247 def FileExists(self, path):
246 return self._file_system.Exists(path) 248 return self._file_system.Exists(path)
247 249
248 def GetIdentity(self): 250 def GetIdentity(self):
249 return self._file_system.GetIdentity() 251 return self._file_system.GetIdentity()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698