Index: chrome/common/extensions/docs/server2/url_fetcher_urllib2.py |
diff --git a/chrome/common/extensions/docs/server2/url_fetcher_urllib2.py b/chrome/common/extensions/docs/server2/url_fetcher_urllib2.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..211deaa1a3016cb326d0d7685eef1d1a81982c81 |
--- /dev/null |
+++ b/chrome/common/extensions/docs/server2/url_fetcher_urllib2.py |
@@ -0,0 +1,35 @@ |
+# 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 time |
+ |
+from future import Future |
+from url_fetcher import UrlFetcher |
+from urllib2 import urlopen, Request, HTTPError |
+ |
+ |
+class UrlFetcherUrllib2(UrlFetcher): |
+ """UrlFetcher implementation for use outside of AppEngine. Does NOT support |
+ async fetching, so FetchAsync calls are still blocking. |
+ """ |
+ class _Response(object): |
+ def __init__(self, code, content=None, headers={}): |
+ self.status_code = code |
+ self.content = content |
+ self.headers = headers |
+ |
+ def FetchImpl(self, url, headers): |
+ request = Request(url, headers=headers) |
+ try: |
+ urlresponse = urlopen(request) |
+ response = self._Response(urlresponse.code, urlresponse.read(), |
+ urlresponse.headers.dict) |
+ urlresponse.close() |
+ return response |
+ except HTTPError as e: |
+ return self._Response(e.code, e.reason, e.headers.dict) |
+ |
+ def FetchAsyncImpl(self, url, headers): |
+ return Future(callback=lambda: self.FetchImpl(url, headers)) |