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

Unified Diff: chrome/common/extensions/docs/server2/caching_file_system.py

Issue 521453003: Docserver: Override Walk in CachingFileSystem (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/caching_file_system.py
diff --git a/chrome/common/extensions/docs/server2/caching_file_system.py b/chrome/common/extensions/docs/server2/caching_file_system.py
index 016cac3c7579d94524c98a9eab27c177111a174f..7915d177a0f9d9c7538b6f36988c4ddf35d366ab 100644
--- a/chrome/common/extensions/docs/server2/caching_file_system.py
+++ b/chrome/common/extensions/docs/server2/caching_file_system.py
@@ -7,7 +7,7 @@ import sys
from file_system import FileSystem, StatInfo, FileNotFoundError
from future import Future
-from path_util import IsDirectory, ToDirectory
+from path_util import AssertIsDirectory, IsDirectory, ToDirectory
from third_party.json_schema_compiler.memoize import memoize
@@ -29,6 +29,7 @@ class CachingFileSystem(FileSystem):
# which starting empty is designed for. Without this optimisation, cron
# runs are extra slow.
self._read_object_store = create_object_store('read', start_empty=False)
+ self._walk_cache = create_object_store('walk')
not at google - send to devlin 2014/08/29 05:00:14 Should this be start_empty=False for the same reas
ahernandez 2014/08/29 17:20:00 Probably, I wasn't sure.
def Refresh(self):
return self._file_system.Refresh()
@@ -140,6 +141,40 @@ class CachingFileSystem(FileSystem):
return self._file_system.Read(set(paths) - set(up_to_date_data.iterkeys()),
skip_not_found=skip_not_found).Then(next)
+ def Walk(self, root, depth=-1):
not at google - send to devlin 2014/08/29 05:00:13 I'm looking at this quite late at night, so, apolo
+ '''Overrides FileSystem.Walk() to provide caching functionality.
+ '''
+ AssertIsDirectory(root)
+ basepath = root
+
+ def walk(root, depth):
+ if depth == 0:
+ return
+ AssertIsDirectory(root)
+ res = self._walk_cache.Get(root).Get()
+ cache_stat = self._stat_object_store.Get(root).Get()
ahernandez 2014/08/29 02:15:11 These don't need to be Then-ified, right?
+ root_stat = self.Stat(root)
+
+ if res and cache_stat.version == root_stat.version:
+ dirs, files = res
+ else:
+ dirs, files = [], []
+ for f in self.ReadSingle(root).Get():
+ if IsDirectory(f):
+ dirs.append(f)
+ else:
+ files.append(f)
+ self._walk_cache.Set(root, (dirs, files))
+
+ yield root[len(basepath):].rstrip('/'), dirs, files
+
+ for d in dirs:
+ for walkinfo in walk(root + d, depth - 1):
+ yield walkinfo
+
+ for walkinfo in walk(root, depth):
+ yield walkinfo
+
def GetIdentity(self):
return self._file_system.GetIdentity()

Powered by Google App Engine
This is Rietveld 408576698