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

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

Issue 164193003: Docserver: Implement Cron for PathCanonicalizer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 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/path_canonicalizer.py
diff --git a/chrome/common/extensions/docs/server2/path_canonicalizer.py b/chrome/common/extensions/docs/server2/path_canonicalizer.py
index fd95e9b71b32dca54d69b96648e067918216b2ad..1d8e3fc2995d767b000e2b1bd2ab12a39f79d3b9 100644
--- a/chrome/common/extensions/docs/server2/path_canonicalizer.py
+++ b/chrome/common/extensions/docs/server2/path_canonicalizer.py
@@ -5,6 +5,7 @@
from collections import defaultdict
import posixpath
+from future import Gettable, Future
from path_util import SplitParent
from special_paths import SITE_VERIFICATION_FILE
@@ -34,47 +35,51 @@ class PathCanonicalizer(object):
self._strip_extensions = strip_extensions
def _LoadCache(self):
- cached = self._cache.GetMulti(('canonical_paths',
- 'simplified_paths_map')).Get()
-
- # |canonical_paths| is the pre-calculated set of canonical paths.
- # |simplified_paths_map| is a lazily populated mapping of simplified file
- # names to a list of full paths that contain them. For example,
- # - browseraction: [extensions/browserAction.html]
- # - storage: [apps/storage.html, extensions/storage.html]
- canonical_paths, simplified_paths_map = (
- cached.get('canonical_paths'), cached.get('simplified_paths_map'))
-
- if canonical_paths is None:
- assert simplified_paths_map is None
- canonical_paths = set()
- simplified_paths_map = defaultdict(list)
- for base, dirs, files in self._file_system.Walk(''):
- for path in dirs + files:
- path_without_ext, ext = posixpath.splitext(path)
- canonical_path = posixpath.join(base, path_without_ext)
- if (ext not in self._strip_extensions or
- path == SITE_VERIFICATION_FILE):
- canonical_path += ext
- canonical_paths.add(canonical_path)
- simplified_paths_map[_SimplifyFileName(path)].append(canonical_path)
- # Store |simplified_paths_map| sorted. Ties in length are broken by taking
- # the shortest, lexicographically smallest path.
- for path_list in simplified_paths_map.itervalues():
- path_list.sort(key=lambda p: (len(p), p))
- self._cache.SetMulti({
- 'canonical_paths': canonical_paths,
- 'simplified_paths_map': simplified_paths_map,
- })
- else:
- assert simplified_paths_map is not None
-
- return canonical_paths, simplified_paths_map
+ cached_future = self._cache.GetMulti(('canonical_paths',
+ 'simplified_paths_map'))
+
+ def resolve():
+ # |canonical_paths| is the pre-calculated set of canonical paths.
+ # |simplified_paths_map| is a lazily populated mapping of simplified file
+ # names to a list of full paths that contain them. For example,
+ # - browseraction: [extensions/browserAction.html]
+ # - storage: [apps/storage.html, extensions/storage.html]
+ cached = cached_future.Get()
+ canonical_paths, simplified_paths_map = (
+ cached.get('canonical_paths'), cached.get('simplified_paths_map'))
+
+ if canonical_paths is None:
+ assert simplified_paths_map is None
+ canonical_paths = set()
+ simplified_paths_map = defaultdict(list)
+ for base, dirs, files in self._file_system.Walk(''):
+ for path in dirs + files:
+ path_without_ext, ext = posixpath.splitext(path)
+ canonical_path = posixpath.join(base, path_without_ext)
+ if (ext not in self._strip_extensions or
+ path == SITE_VERIFICATION_FILE):
+ canonical_path += ext
+ canonical_paths.add(canonical_path)
+ simplified_paths_map[_SimplifyFileName(path)].append(canonical_path)
+ # Store |simplified_paths_map| sorted. Ties in length are broken by
+ # taking the shortest, lexicographically smallest path.
+ for path_list in simplified_paths_map.itervalues():
+ path_list.sort(key=lambda p: (len(p), p))
+ self._cache.SetMulti({
+ 'canonical_paths': canonical_paths,
+ 'simplified_paths_map': simplified_paths_map,
+ })
+ else:
+ assert simplified_paths_map is not None
+
+ return canonical_paths, simplified_paths_map
+
+ return Future(delegate=Gettable(resolve))
def Canonicalize(self, path):
'''Returns the canonical path for |path|.
'''
- canonical_paths, simplified_paths_map = self._LoadCache()
+ canonical_paths, simplified_paths_map = self._LoadCache().Get()
# Path may already be the canonical path.
if path in canonical_paths:
@@ -99,3 +104,6 @@ class PathCanonicalizer(object):
max_prefix, max_prefix_length = path_for_file, prefix_length
return max_prefix
+
+ def Cron(self):
+ return self._LoadCache()

Powered by Google App Engine
This is Rietveld 408576698