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

Unified Diff: native_client_sdk/src/build_tools/sdk_tools/download.py

Issue 11228013: [NaCl SDK] Refactor sdk_update*. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: windows fixes Created 8 years, 2 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: native_client_sdk/src/build_tools/sdk_tools/download.py
diff --git a/native_client_sdk/src/build_tools/sdk_tools/download.py b/native_client_sdk/src/build_tools/sdk_tools/download.py
new file mode 100644
index 0000000000000000000000000000000000000000..4f2cb3be98df069e35b0a79a6eb4d9b2d15cad39
--- /dev/null
+++ b/native_client_sdk/src/build_tools/sdk_tools/download.py
@@ -0,0 +1,82 @@
+# Copyright (c) 2012 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 hashlib
+import os
+import sys
+# when pylint runs the third_party module is the one from depot_tools
+# pylint: disable=E0611
+from third_party import fancy_urllib
+import urllib2
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+
+
+def UrlOpen(url):
+ request = fancy_urllib.FancyRequest(url)
+ ca_certs = os.path.join(SCRIPT_DIR, 'cacerts.txt')
+ request.set_ssl_info(ca_certs=ca_certs)
+ url_opener = urllib2.build_opener(
+ fancy_urllib.FancyProxyHandler(),
+ fancy_urllib.FancyRedirectHandler(),
+ fancy_urllib.FancyHTTPSHandler())
+ return url_opener.open(request)
+
+
+def MakeProgressFunction(file_size=0):
+ # An inner function can only read nonlocal variables, not assign them. We can
+ # work around this by using a list of one element.
+ dots = [0]
+ def ShowKnownProgress(progress):
+ '''Returns a progress function based on a known file size'''
+ if progress == 0:
+ sys.stdout.write('|%s|\n' % ('=' * 48))
+ else:
+ new_dots = progress * 50 / file_size - dots[0]
+ sys.stdout.write('.' * new_dots)
+ dots[0] += new_dots
+ if progress == file_size:
+ sys.stdout.write('\n')
+ sys.stdout.flush()
+
+ return ShowKnownProgress
+
+
+def DownloadAndComputeHash(from_stream, to_stream=None, progress_func=None):
+ '''Read from from-stream and generate sha1 and size info.
+
+ Args:
+ from_stream: An input stream that supports read.
+ to_stream: [optional] the data is written to to_stream if it is
+ provided.
+ progress_func: [optional] A function used to report download progress. If
+ provided, progress_func is called with progress=0 at the
+ beginning of the download, periodically with progress=1
+ during the download, and progress=100 at the end.
+
+ Return
+ A tuple (sha1, size) where sha1 is a sha1-hash for the archive data and
+ size is the size of the archive data in bytes.'''
+ # Use a no-op progress function if none is specified.
+ def progress_no_op(progress):
+ pass
+ if not progress_func:
+ progress_func = progress_no_op
+
+ sha1_hash = hashlib.sha1()
+ size = 0
+ progress_func(progress=0)
+ while(1):
+ data = from_stream.read(32768)
+ if not data:
+ break
+ sha1_hash.update(data)
+ size += len(data)
+ if to_stream:
+ to_stream.write(data)
+ progress_func(size)
+
+ progress_func(progress=100)
+ return sha1_hash.hexdigest(), size

Powered by Google App Engine
This is Rietveld 408576698