diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /testing/mozharness/external_tools/download_file.py | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'testing/mozharness/external_tools/download_file.py')
-rwxr-xr-x | testing/mozharness/external_tools/download_file.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/testing/mozharness/external_tools/download_file.py b/testing/mozharness/external_tools/download_file.py new file mode 100755 index 000000000..91b0a4668 --- /dev/null +++ b/testing/mozharness/external_tools/download_file.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python +# ***** BEGIN LICENSE BLOCK ***** +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. +# ***** END LICENSE BLOCK ***** +""" Helper script for download_file() + +We lose some mozharness functionality by splitting this out, but we gain output_timeout. +""" + +import os +import socket +import sys +import urllib2 +import urlparse + + +def download_file(url, file_name): + try: + f_length = None + f = urllib2.urlopen(url, timeout=30) + if f.info().get('content-length') is not None: + f_length = int(f.info()['content-length']) + got_length = 0 + local_file = open(file_name, 'wb') + while True: + block = f.read(1024 ** 2) + if not block: + if f_length is not None and got_length != f_length: + raise urllib2.URLError("Download incomplete; content-length was %d, but only received %d" % (f_length, got_length)) + break + local_file.write(block) + if f_length is not None: + got_length += len(block) + local_file.close() + print "%s downloaded to %s" % (url, file_name) + except urllib2.HTTPError, e: + print "Warning: Server returned status %s %s for %s" % (str(e.code), str(e), url) + raise + except urllib2.URLError, e: + print "URL Error: %s" % url + remote_host = urlparse.urlsplit(url)[1] + if remote_host: + os.system("nslookup %s" % remote_host) + raise + except socket.timeout, e: + print "Timed out accessing %s: %s" % (url, str(e)) + raise + except socket.error, e: + print "Socket error when accessing %s: %s" % (url, str(e)) + raise + +if __name__ == '__main__': + if len(sys.argv) != 3: + if len(sys.argv) != 2: + print "Usage: download_file.py URL [FILENAME]" + sys.exit(-1) + parts = urlparse.urlparse(sys.argv[1]) + file_name = parts[2].split('/')[-1] + else: + file_name = sys.argv[2] + if os.path.exists(file_name): + print "%s exists; removing" % file_name + os.remove(file_name) + if os.path.exists(file_name): + print "%s still exists; exiting" + sys.exit(-1) + download_file(sys.argv[1], file_name) |