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

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

Issue 1151283007: Docserver overhaul: Gitiles away from me. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove inform_users template to fix presubmit failure (it's now a redirect) Created 5 years, 6 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/url_fetcher_fake.py
diff --git a/chrome/common/extensions/docs/server2/url_fetcher_fake.py b/chrome/common/extensions/docs/server2/url_fetcher_fake.py
new file mode 100644
index 0000000000000000000000000000000000000000..0365e3febfabdb17267638fac930d8773456ccbb
--- /dev/null
+++ b/chrome/common/extensions/docs/server2/url_fetcher_fake.py
@@ -0,0 +1,62 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import logging
+import re
+import time
+
+from environment import IsAppEngine
+from future import Future
+from url_fetcher import UrlFetcher
+
+
+FAKE_URL_FETCHER_CONFIGURATION = None
+
+
+def ConfigureFakeUrlFetch(configuration):
+ """|configuration| is a dictionary mapping strings to fake urlfetch classes.
+ A fake urlfetch class just needs to have a fetch method. The keys of the
+ dictionary are treated as regex, and they are matched with the URL to
+ determine which fake urlfetch is used.
+ """
+ global FAKE_URL_FETCHER_CONFIGURATION
+ FAKE_URL_FETCHER_CONFIGURATION = dict(
+ (re.compile(k), v) for k, v in configuration.iteritems())
+
+
+def _GetConfiguration(key):
+ if not FAKE_URL_FETCHER_CONFIGURATION:
+ raise ValueError('No fake fetch paths have been configured. '
+ 'See ConfigureFakeUrlFetch in url_fetcher_fake.py.')
+ for k, v in FAKE_URL_FETCHER_CONFIGURATION.iteritems():
+ if k.match(key):
+ return v
+ raise ValueError('No configuration found for %s' % key)
+
+
+class UrlFetcherFake(UrlFetcher):
+ """A fake UrlFetcher implementation which may be configured with manual URL
+ overrides for testing. By default this 404s on everything.
+ """
+ class DownloadError(Exception):
+ pass
+
+ class _Response(object):
+ def __init__(self, content):
+ self.content = content
+ self.headers = {'Content-Type': 'none'}
+ self.status_code = 200
+
+ def FetchImpl(self, url, headers):
+ if IsAppEngine():
+ raise ValueError('Attempted to fetch URL from AppEngine: %s' % url)
+
+ url = url.split('?', 1)[0]
+ response = self._Response(_GetConfiguration(url).fetch(url))
+ if response.content is None:
+ response.status_code = 404
+ return response
+
+ def FetchAsyncImpl(self, url, headers):
+ return Future(callback=lambda: self.FetchImpl(url, headers))

Powered by Google App Engine
This is Rietveld 408576698