downloadkit/downloadkit.py
changeset 142 1ef616833a37
parent 141 55dd69d60bbc
child 154 77c25e4f2c6f
equal deleted inserted replaced
141:55dd69d60bbc 142:1ef616833a37
   183 	
   183 	
   184 	try:
   184 	try:
   185 		response = urllib2.urlopen(req)
   185 		response = urllib2.urlopen(req)
   186 		CHUNK = 128 * 1024
   186 		CHUNK = 128 * 1024
   187 		size = 0
   187 		size = 0
       
   188 		filesize = -1
   188 		last_time = time.time()
   189 		last_time = time.time()
   189 		last_size = size
   190 		last_size = size
   190 		fp = open(filename, 'wb')
   191 		fp = open(filename, 'wb')
   191 		while True:
   192 		while True:
   192 			chunk = response.read(CHUNK)
   193 			chunk = response.read(CHUNK)
   194 			if size == 0 and chunk.find('<div id="sign_in_box">') != -1:
   195 			if size == 0 and chunk.find('<div id="sign_in_box">') != -1:
   195 				# our urllib2 cookies have gone awol - login again
   196 				# our urllib2 cookies have gone awol - login again
   196 				login(False)
   197 				login(False)
   197 				req = urllib2.Request(url, None, headers)
   198 				req = urllib2.Request(url, None, headers)
   198 				response = urllib2.urlopen(req)
   199 				response = urllib2.urlopen(req)
   199 				chunk = response.read(CHUNK)	  
   200 				chunk = response.read(CHUNK)
       
   201 			if size == 0:
       
   202 				filesize = int(response.info()['Content-Length'])  
   200 			fp.write(chunk)
   203 			fp.write(chunk)
   201 			size += len(chunk)
   204 			size += len(chunk)
   202 			now = time.time()
   205 			now = time.time()
   203 			if options.progress and now-last_time > 20:
   206 			if options.progress and now-last_time > 20:
   204 				print "- %d Kb (%d Kb/s)" % (size/1024, ((size-last_size)/1024/(now-last_time))+0.5)
   207 				rate = (size-last_size)/(now-last_time)
       
   208 				estimate = ""
       
   209 				if filesize > 0 and rate > 0:
       
   210 					remaining_seconds = (filesize-size)/rate
       
   211 					if remaining_seconds > 110:
       
   212 						remaining = "%d minutes" % (remaining_seconds/60)
       
   213 					else:
       
   214 						remaining = "%d seconds" % remaining_seconds
       
   215 					estimate = "- %d%% est. %s" % ((100*size/filesize), remaining)
       
   216 				print "- %d Kb (%d Kb/s) %s" % (size/1024, (rate/1024)+0.5, estimate)
   205 				last_time = now
   217 				last_time = now
   206 				last_size = size
   218 				last_size = size
   207 		fp.close()
   219 		fp.close()
       
   220 		if options.progress:
       
   221 			now = time.time()
       
   222 			print "- Completed %s - %d Kb in %d seconds" % (filename, (filesize/1024)+0.5, now-last_time)
   208 
   223 
   209 	#handle errors
   224 	#handle errors
   210 	except urllib2.HTTPError, e:
   225 	except urllib2.HTTPError, e:
   211 		print "HTTP Error:",e.code , downloadurl
   226 		print "HTTP Error:",e.code , downloadurl
   212 		return False
   227 		return False
   269 	# wait for the unzipping threads to complete
   284 	# wait for the unzipping threads to complete
   270 	complete_outstanding_unzips()  
   285 	complete_outstanding_unzips()  
   271 
   286 
   272 	return 1
   287 	return 1
   273 
   288 
   274 parser = OptionParser(version="%prog 0.5", usage="Usage: %prog [options] version")
   289 parser = OptionParser(version="%prog 0.5.1", usage="Usage: %prog [options] version")
   275 parser.add_option("-n", "--dryrun", action="store_true", dest="dryrun",
   290 parser.add_option("-n", "--dryrun", action="store_true", dest="dryrun",
   276 	help="print the files to be downloaded, the 7z commands, and the recommended deletions")
   291 	help="print the files to be downloaded, the 7z commands, and the recommended deletions")
   277 parser.add_option("--nosrc", action="store_true", dest="nosrc",
   292 parser.add_option("--nosrc", action="store_true", dest="nosrc",
   278 	help="Don't download any of the source code available directly from Mercurial")
   293 	help="Don't download any of the source code available directly from Mercurial")
   279 parser.add_option("--nounzip", action="store_true", dest="nounzip",
   294 parser.add_option("--nounzip", action="store_true", dest="nounzip",