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

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

Issue 13470005: Refactor the devserver to make it easier to control caching (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cduvall, rebase Created 7 years, 8 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/api_list_data_source.py
diff --git a/chrome/common/extensions/docs/server2/api_list_data_source.py b/chrome/common/extensions/docs/server2/api_list_data_source.py
index 9f108aa46b309eb22b6eddf610238c4cd4b82d99..7c1c65a09f316723c9a74a5c79cde89cd136d5dd 100644
--- a/chrome/common/extensions/docs/server2/api_list_data_source.py
+++ b/chrome/common/extensions/docs/server2/api_list_data_source.py
@@ -6,9 +6,11 @@ import logging
import os
from file_system import FileNotFoundError
-import compiled_file_system as compiled_fs
import third_party.json_schema_compiler.model as model
-from docs_server_utils import SanitizeAPIName
+import docs_server_utils as utils
+
+# Increment this if the data model changes for APIDataSource.
+_VERSION = 1
# These files are special cases that shouldn't be in the API list.
IGNORED_FILES = [
@@ -17,22 +19,29 @@ IGNORED_FILES = [
class APIListDataSource(object):
""" This class creates a list of chrome.* APIs and chrome.experimental.* APIs
- that are used in the api_index.html and experimental.html pages.
+ for extensions and apps that are used in the api_index.html and
+ experimental.html pages.
+ |api_path| is the path to the API schemas.
+ |public_path| is the path to the public HTML templates.
+ An API is considered listable if it's in both |api_path| and |public_path| -
+ the API schemas may contain undocumentable APIs, and the public HTML templates
+ will contain non-API articles.
"""
class Factory(object):
- def __init__(self, cache_factory, file_system, api_path, public_path):
- self._cache = cache_factory.Create(self._ListAPIs, compiled_fs.LIST)
- self._file_system = file_system
+ def __init__(self, compiled_fs_factory, api_path, public_path):
+ self._compiled_fs = compiled_fs_factory.Create(
+ self._ListAPIs, APIListDataSource, version=_VERSION)
+ self._identity_fs = compiled_fs_factory.GetOrCreateIdentity()
def Normalize(string):
return string if string.endswith('/') else (string + '/')
self._api_path = Normalize(api_path)
self._public_path = Normalize(public_path)
def _GetAPIsInSubdirectory(self, api_names, doc_type):
- public_templates = self._file_system.ReadSingle(
- self._public_path + doc_type + '/')
- template_names = [os.path.splitext(name)[0]
- for name in public_templates]
+ public_templates = self._identity_fs.GetFromFileListing(
+ '%s%s/' % (self._public_path, doc_type))
+ template_names = set(os.path.splitext(name)[0]
+ for name in public_templates)
experimental_apis = []
chrome_apis = []
for template_name in sorted(template_names):
@@ -55,28 +64,28 @@ class APIListDataSource(object):
}
def _ListAPIs(self, base_dir, apis):
- api_names = set(SanitizeAPIName(name, self._api_path) for name in apis)
+ api_names = set(utils.SanitizeAPIName(name) for name in apis)
return {
'apps': self._GetAPIsInSubdirectory(api_names, 'apps'),
'extensions': self._GetAPIsInSubdirectory(api_names, 'extensions')
}
def Create(self):
- return APIListDataSource(self._cache, self._api_path)
+ return APIListDataSource(self._compiled_fs, self._api_path)
- def __init__(self, cache, api_path):
- self._cache = cache
+ def __init__(self, compiled_fs, api_path):
+ self._compiled_fs = compiled_fs
self._api_path = api_path
def GetAllNames(self):
names = []
- for i in ['apps', 'extensions']:
- for j in ['chrome', 'experimental']:
- names.extend(self.get(i).get(j))
+ for platform in ['apps', 'extensions']:
+ for category in ['chrome', 'experimental']:
+ names.extend(self.get(platform).get(category))
return [api_name['name'] for api_name in names]
def get(self, key):
try:
- return self._cache.GetFromFileListing(self._api_path)[key]
+ return self._compiled_fs.GetFromFileListing(self._api_path)[key]
except FileNotFoundError as e:
raise ValueError('%s: Error listing files for "%s".' % (e, key))

Powered by Google App Engine
This is Rietveld 408576698