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

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

Issue 575613003: Docserver: Gitiles auth and cron refactoring. (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 side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/gitiles_file_system.py
diff --git a/chrome/common/extensions/docs/server2/gitiles_file_system.py b/chrome/common/extensions/docs/server2/gitiles_file_system.py
index 8470affd80c96e38aeca637c45b413300ad92db7..46b6412864fa0474e7bf453a0c6ab6680c6970ee 100644
--- a/chrome/common/extensions/docs/server2/gitiles_file_system.py
+++ b/chrome/common/extensions/docs/server2/gitiles_file_system.py
@@ -7,6 +7,7 @@ from base64 import b64decode
from itertools import izip
import logging
import json
+import logging
ahernandez 2014/09/15 23:58:02 Double import.
Ken Rockot(use gerrit already) 2014/09/16 00:24:31 Done.
import posixpath
import time
import traceback
@@ -17,16 +18,20 @@ from docs_server_utils import StringIdentity
from file_system import (FileNotFoundError,
FileSystem,
FileSystemError,
+ FileSystemThrottledError,
StatInfo)
from future import All, Future
from path_util import AssertIsValid, IsDirectory, ToDirectory
from third_party.json_schema_compiler.memoize import memoize
from url_constants import (GITILES_BASE,
- GITILES_BRANCH_BASE,
+ GITILES_SRC_ROOT,
+ GITILES_BRANCHES_PATH,
GITILES_OAUTH2_SCOPE)
+
_JSON_FORMAT = '?format=JSON'
_TEXT_FORMAT = '?format=TEXT'
+_AUTH_PATH_PREFIX = '/a'
def _ParseGitilesJson(json_data):
@@ -51,12 +56,18 @@ class GitilesFileSystem(FileSystem):
'''
@staticmethod
def Create(branch='master', commit=None):
+ token, _ = app_identity.get_access_token(GITILES_OAUTH2_SCOPE)
+ path_prefix = '' if token is None else _AUTH_PATH_PREFIX
if commit:
- base_url = '%s/%s' % (GITILES_BASE, commit)
+ base_url = '%s%s/%s/%s' % (
+ GITILES_BASE, path_prefix, GITILES_SRC_ROOT, commit)
elif branch is 'master':
- base_url = '%s/master' % GITILES_BASE
+ base_url = '%s%s/%s/master' % (
+ GITILES_BASE, path_prefix, GITILES_SRC_ROOT)
else:
- base_url = '%s/%s' % (GITILES_BRANCH_BASE, branch)
+ base_url = '%s%s/%s/%s/%s' % (
+ GITILES_BASE, path_prefix, GITILES_SRC_ROOT,
+ GITILES_BRANCHES_PATH, branch)
return GitilesFileSystem(AppEngineUrlFetcher(), base_url, branch, commit)
def __init__(self, fetcher, base_url, branch, commit):
@@ -74,8 +85,7 @@ class GitilesFileSystem(FileSystem):
return self._fetcher.FetchAsync('%s/%s' % (self._base_url, url),
access_token=access_token)
- def _ResolveFetchContent(self, path, fetch_future, retry,
- skip_not_found=False):
+ def _ResolveFetchContent(self, path, fetch_future, skip_not_found=False):
'''Returns a future to cleanly resolve |fetch_future|.
'''
def handle(e):
@@ -94,8 +104,9 @@ class GitilesFileSystem(FileSystem):
if result.status_code == 429:
logging.warning('Access throttled when fetching %s for Get from %s' %
(path, self._base_url))
- time.sleep(30)
- return retry().Then(get_content, handle)
+ raise FileSystemThrottledError(
+ 'Access throttled when fetching %s for Get from %s' %
+ (path, self._base_url))
if result.status_code != 200:
raise FileSystemError(
'Got %s when fetching %s for Get from %s, content %s' %
@@ -131,11 +142,8 @@ class GitilesFileSystem(FileSystem):
return path + (_JSON_FORMAT if IsDirectory(path) else _TEXT_FORMAT)
# A list of tuples of the form (path, Future).
- fetches = []
- for path in paths:
- def make_fetch_future():
- return self._FetchAsync(fixup_url_format(path))
- fetches.append((path, make_fetch_future(), make_fetch_future))
+ fetches = [(path, self._FetchAsync(fixup_url_format(path)))
+ for path in paths]
def parse_contents(results):
value = {}
@@ -147,8 +155,8 @@ class GitilesFileSystem(FileSystem):
value[path] = (list_dir if IsDirectory(path) else b64decode)(content)
return value
- return All(self._ResolveFetchContent(path, future, factory, skip_not_found)
- for path, future, factory in fetches).Then(parse_contents)
+ return All(self._ResolveFetchContent(path, future, skip_not_found)
+ for path, future in fetches).Then(parse_contents)
def Refresh(self):
return Future(value=())
@@ -184,14 +192,10 @@ class GitilesFileSystem(FileSystem):
# the root directory JSON content, whereas the former serves the branch
# commit info JSON content.
- def make_fetch_future():
- access_token, _ = app_identity.get_access_token(GITILES_OAUTH2_SCOPE)
- return self._fetcher.FetchAsync(self._base_url + _JSON_FORMAT,
- access_token = access_token)
-
- fetch_future = make_fetch_future()
- content_future = self._ResolveFetchContent(self._base_url, fetch_future,
- make_fetch_future)
+ access_token, _ = app_identity.get_access_token(GITILES_OAUTH2_SCOPE)
+ fetch_future = self._fetcher.FetchAsync(self._base_url + _JSON_FORMAT,
+ access_token=access_token)
+ content_future = self._ResolveFetchContent(self._base_url, fetch_future)
return content_future.Then(lambda json: _ParseGitilesJson(json)[key])
def GetCommitID(self):
@@ -217,18 +221,15 @@ class GitilesFileSystem(FileSystem):
'%s from %s was not in child versions for Stat' % (filename, path))
return StatInfo(stat_info.child_versions[filename])
- def make_fetch_future():
- return self._FetchAsync(ToDirectory(dir_) + _JSON_FORMAT)
-
- fetch_future = make_fetch_future()
- return self._ResolveFetchContent(path, fetch_future,
- make_fetch_future).Then(stat)
+ fetch_future = self._FetchAsync(ToDirectory(dir_) + _JSON_FORMAT)
+ return self._ResolveFetchContent(path, fetch_future).Then(stat)
def GetIdentity(self):
# NOTE: Do not use commit information to create the string identity.
# Doing so will mess up caching.
if self._commit is None and self._branch != 'master':
- str_id = GITILES_BRANCH_BASE
+ str_id = '%s/%s/%s/%s' % (
+ GITILES_BASE, GITILES_SRC_ROOT, GITILES_BRANCHES_PATH, self._branch)
else:
- str_id = GITILES_BASE
+ str_id = '%s/%s' % (GITILES_BASE, GITILES_SRC_ROOT)
return '@'.join((self.__class__.__name__, StringIdentity(str_id)))

Powered by Google App Engine
This is Rietveld 408576698