mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-11-20 10:33:36 +00:00
70 lines
2.3 KiB
Python
Executable File
70 lines
2.3 KiB
Python
Executable File
#!/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)
|