downloadkit/downloadkit.py
author Simon Howkins <simonh@symbian.org>
Thu, 13 May 2010 16:27:37 +0100
changeset 244 2251fde91223
parent 199 a99c74c53f62
child 274 3b8bce67b574
permissions -rw-r--r--
Changed script to use CSV formatted input, rather than TSV. This means that the script can directly process the CSV downloaded from Bugzilla, without any need to use Excel to convert it.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     1
#!/usr/bin/python
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     2
# Copyright (c) 2009 Symbian Foundation.
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     3
# All rights reserved.
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     4
# This component and the accompanying materials are made available
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     5
# under the terms of the License "Eclipse Public License v1.0"
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     6
# which accompanies this distribution, and is available
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     8
#
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
     9
# Initial Contributors:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    10
# Symbian Foundation - Initial contribution
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    11
# 
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    12
# Description:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    13
# Script to download and unpack a Symbian PDK - assumes "7z" installed to unzip the files
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    14
174
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    15
import socket
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    16
import urllib2
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    17
import urllib
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    18
import os.path
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    19
import cookielib
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    20
import sys
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    21
import getpass
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    22
import re
140
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
    23
import time
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    24
from BeautifulSoup import BeautifulSoup
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
    25
from optparse import OptionParser
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
    26
import hashlib
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
    27
import xml.etree.ElementTree as ET 
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    28
199
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
    29
version = '0.16'
171
5f1dcce7f6d4 version 0.10 - add --nowinscw option to avoid winscw binaries, add version to the user-agent string
William Roberts <williamr@symbian.org>
parents: 170
diff changeset
    30
user_agent = 'downloadkit.py script v' + version
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    31
headers = { 'User-Agent' : user_agent }
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    32
top_level_url = "https://developer.symbian.org"
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    33
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()	# not relevant for live Symbian website
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
    34
download_list = []
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
    35
unzip_list = []
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    36
170
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
    37
def build_opener(debug=False):
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    38
	# Create a HTTP and HTTPS handler with the appropriate debug
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    39
	# level.  We intentionally create a new one because the
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    40
	# OpenerDirector class in urllib2 is smart enough to replace
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    41
	# its internal versions with ours if we pass them into the
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    42
	# urllib2.build_opener method.  This is much easier than trying
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    43
	# to introspect into the OpenerDirector to find the existing
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    44
	# handlers.
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    45
	http_handler = urllib2.HTTPHandler(debuglevel=debug)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    46
	https_handler = urllib2.HTTPSHandler(debuglevel=debug)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    47
	
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    48
	# We want to process cookies, but only in memory so just use
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    49
	# a basic memory-only cookie jar instance
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    50
	cookie_jar = cookielib.LWPCookieJar()
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    51
	cookie_handler = urllib2.HTTPCookieProcessor(cookie_jar)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    52
	
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    53
	# add HTTP authentication password handler (only relevant for Symbian staging server)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    54
	authhandler = urllib2.HTTPBasicAuthHandler(passman)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    55
	
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    56
	handlers = [authhandler, http_handler, https_handler, cookie_handler]
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    57
	opener = urllib2.build_opener(*handlers)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    58
	
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    59
	# Save the cookie jar with the opener just in case it's needed
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    60
	# later on
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    61
	opener.cookie_jar = cookie_jar
170
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
    62
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    63
	return opener
170
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
    64
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    65
urlopen = urllib2.urlopen
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    66
Request = urllib2.Request
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
    67
174
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    68
def quick_networking_check():
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    69
	global options
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    70
	defaulttimeout = socket.getdefaulttimeout()
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    71
	socket.setdefaulttimeout(15)
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    72
	probesite = top_level_url
174
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    73
	probeurl = probesite + '/main/user_profile/login.php'
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    74
	headers = { 'User-Agent' : user_agent }
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    75
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    76
	req = urllib2.Request(probeurl, None, headers)
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    77
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    78
	try:
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    79
		response = urllib2.urlopen(req)
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    80
		doc=response.read()
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    81
	except urllib2.URLError, e:
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    82
		if hasattr(e, 'code') and e.code == 401:#
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    83
			# Needs HTTP basic authentication
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    84
			print >> sys.stderr, 'HTTP username: ',
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    85
			http_username=sys.stdin.readline().strip()
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    86
			http_password=getpass.getpass('HTTP password: ')
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    87
			passman.add_password(None, top_level_url, http_username, http_password)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    88
			# now try again...
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    89
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    90
	try:
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    91
		response = urllib2.urlopen(req)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    92
		doc=response.read()
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    93
	except urllib2.URLError, e:
174
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    94
		print '*** Problem accessing ' + probesite
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    95
		if hasattr(e, 'reason'):
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    96
			print '*** Reason: ', e.reason
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    97
		elif hasattr(e, 'code'):
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
    98
			print '*** Error code: ', e.code
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
    99
		print "Do you need to use a proxy server to access the %s website?" % probesite
174
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
   100
		sys.exit(1)
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
   101
	socket.setdefaulttimeout(defaulttimeout)	# restore the default timeout
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
   102
	if options.progress:
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
   103
		print "Confirmed that we can access " + probesite
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
   104
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   105
def login(prompt):
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   106
	global options
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   107
	loginurl =  top_level_url + '/main/user_profile/login.php'
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   108
	
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   109
	if prompt:
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   110
		if options.username == '':
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   111
			print >> sys.stderr, 'username: ',
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   112
			options.username=sys.stdin.readline().strip()
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   113
		if options.password == '':
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   114
			options.password=getpass.getpass()
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   115
	
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   116
	values = {'username' : options.username,
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   117
	          'password' : options.password,
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   118
	          'submit': 'Login'}
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   119
	          
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   120
	headers = { 'User-Agent' : user_agent }
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   121
	
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   122
	
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   123
	data = urllib.urlencode(values)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   124
	req = urllib2.Request(loginurl, data, headers)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   125
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   126
	response = urllib2.urlopen(req)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   127
	doc=response.read()      
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   128
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   129
	if doc.find('Please try again') != -1:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   130
		print >> sys.stderr, 'Login failed'
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   131
		return False
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   132
	return True
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   133
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   134
from threading import Thread
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   135
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   136
class unzipfile(Thread):
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   137
	def __init__ (self,filename,levels=1,deletelevels=0):
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   138
		Thread.__init__(self)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   139
		self.filename = filename
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   140
		self.levels = levels
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   141
		self.deletelevels = deletelevels
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   142
		self.status = -1
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   143
		
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   144
	def unzip(self,filename,unziplevel,deletelevel):
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   145
		if unziplevel < 1:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   146
			return 0   # do nothing
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   147
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   148
		print "  Unzipping " + filename
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   149
		filelist = os.popen("7z x -y "+self.filename)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   150
		subzips = []
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   151
		for line in filelist.readlines():
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   152
			# Extracting  src_oss_app_webuis.zip
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   153
			match = re.match(r"^Extracting\s+(\S+.zip)$", line)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   154
			if match is None: continue
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   155
			subzips.append(match.group(1))
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   156
		topstatus = filelist.close()
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   157
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   158
		if deletelevel > 0:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   159
			print "  Deleting " + filename
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   160
			os.remove(filename)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   161
		if unziplevel > 1 and len(subzips) > 0:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   162
			print "  Expanding %d zip files from %s" % (len(subzips), filename)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   163
			for subzip in subzips:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   164
				self.unzip(subzip, unziplevel-1, deletelevel-1)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   165
		return topstatus
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   166
	def run(self):
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   167
		self.status = self.unzip(self.filename, self.levels, self.deletelevels)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   168
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   169
threadlist = []
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   170
def schedule_unzip(filename, unziplevel, deletelevel):
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   171
	global options
139
9baccbcc5509 version 0.4 - added --nounzip option to suppress the unzipping and deletion
William Roberts <williamr@symbian.org>
parents: 138
diff changeset
   172
	if options.nounzip :
9baccbcc5509 version 0.4 - added --nounzip option to suppress the unzipping and deletion
William Roberts <williamr@symbian.org>
parents: 138
diff changeset
   173
		return
153
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   174
	if options.nodelete :
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   175
		deletelevel = 0
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   176
	if options.dryrun :
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   177
		global unzip_list
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   178
		if unziplevel > 0:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   179
			unzip_list.append("7z x -y %s" % filename)
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   180
			if unziplevel > 1:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   181
				unzip_list.append("# unzip recursively %d more times" % unziplevel-1)
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   182
		if deletelevel > 0:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   183
			unzip_list.append("# delete %s" % filename)
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   184
			if deletelevel > 1:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   185
				unzip_list.append("# delete zip files recursively %d more times" % deletelevel-1)
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   186
		return
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   187
		
140
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
   188
	unzipthread = unzipfile(filename, unziplevel, deletelevel)
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   189
	global threadlist
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   190
	threadlist.append(unzipthread)
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   191
	unzipthread.start()
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   192
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   193
def complete_outstanding_unzips():
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   194
	global options
139
9baccbcc5509 version 0.4 - added --nounzip option to suppress the unzipping and deletion
William Roberts <williamr@symbian.org>
parents: 138
diff changeset
   195
	if options.dryrun or options.nounzip:
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   196
		return
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   197
	print "Waiting for outstanding commands to finish..."
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   198
	for thread in threadlist:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   199
		thread.join()  
153
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   200
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   201
def check_unzip_environment():
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   202
	global options
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   203
	if options.nounzip:
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   204
		return True		# if we aren't unzipping, no need to have 7z installed
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   205
	help = os.popen("7z -h")
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   206
	for line in help.readlines():
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   207
		if re.match('7-Zip', line) :
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   208
			help.close()
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   209
			return True
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   210
	help.close()
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   211
	return False
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   212
128
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   213
def orderResults(x,y) :
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   214
	def ranking(name) :
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   215
		# 0th = release_metadata
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   216
		if re.match(r"release_metadata", name):
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   217
			return 0000;
128
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   218
		# 1st = release_metadata, build_BOM.zip (both small things!)
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   219
		if re.match(r"build_BOM", name):
128
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   220
			return 1000;
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   221
		# 2nd = tools, binaries (required for execution and compilation)
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   222
		elif re.match(r"(binaries_|tools_)", name):
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   223
			return 2000;
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   224
		# 3rd = rnd binaries, binary patches
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   225
		elif re.match(r"(bin_)", name):
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   226
			return 3000;
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   227
		# 4th = sources
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   228
		elif re.match(r"(src_sfl|src_oss)", name):
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   229
			return 4000;
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   230
		# 5rd = rnd sources, source patches (not sure we'd ever have those)
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   231
		elif re.match(r"(src_)", name):
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   232
			return 5000;
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   233
		# Last, anything else
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   234
		return 10000;
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   235
	xtitle = x['title']
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   236
	ytitle = y['title']
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   237
	return cmp(ranking(xtitle)+cmp(xtitle,ytitle), ranking(ytitle))
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   238
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   239
def md5_checksum(filename):
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   240
	MD5_BLOCK_SIZE = 128 * 1024
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   241
	md5 = hashlib.md5()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   242
	try:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   243
		file = open(filename,"rb")
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   244
	except IOError:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   245
		print "Terminating script: Unable to open %S" % filename
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   246
		sys.exit()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   247
	while True:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   248
		data = file.read(MD5_BLOCK_SIZE)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   249
		if not data:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   250
			break
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   251
		md5.update(data)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   252
	file.close()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   253
	return md5.hexdigest().upper()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   254
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   255
checksums = {}
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   256
def parse_release_metadata(filename):
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   257
	if os.path.exists(filename):
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   258
		tree = ET.parse(filename)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   259
		iter = tree.getiterator('package')
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   260
		for element in iter:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   261
			if element.keys():
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   262
				file = element.get("name")
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   263
				md5 = element.get("md5checksum")
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   264
				checksums[file] = md5.upper()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   265
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   266
def download_file(filename,url):
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   267
	global options
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   268
	global checksums
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   269
	if os.path.exists(filename):
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   270
		if filename in checksums:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   271
			print 'Checking existing ' + filename
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   272
			file_checksum = md5_checksum(filename)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   273
			if file_checksum == checksums[filename]:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   274
				if options.progress:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   275
					print '- OK ' + filename
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   276
				return True
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   277
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   278
	if options.dryrun and not re.match(r"release_metadata", filename):
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   279
		global download_list
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   280
		download_info = "download %s %s" % (filename, url)
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   281
		download_list.append(download_info)
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   282
		return True
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   283
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   284
	print 'Downloading ' + filename
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   285
	global headers
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   286
	req = urllib2.Request(url, None, headers)
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   287
	
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   288
	CHUNK = 128 * 1024
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   289
	size = 0
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   290
	filesize = -1
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   291
	start_time = time.time()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   292
	last_time = start_time
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   293
	last_size = size
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   294
	try:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   295
		response = urllib2.urlopen(req)
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   296
		chunk = response.read(CHUNK)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   297
		if chunk.find('<div id="sign_in_box">') != -1:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   298
			# our urllib2 cookies have gone awol - login again
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   299
			login(False)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   300
			req = urllib2.Request(url, None, headers)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   301
			response = urllib2.urlopen(req)
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   302
			chunk = response.read(CHUNK)
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   303
			if chunk.find('<div id="sign_in_box">') != -1:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   304
				# still broken - give up on this one
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   305
				print "*** ERROR trying to download %s" % (filename)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   306
				return False
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   307
		info = response.info()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   308
		if 'Content-Length' in info:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   309
			filesize = int(info['Content-Length'])
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   310
		else:
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   311
			match = re.search('>([^>]+Licen[^<]+)<', chunk, re.IGNORECASE)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   312
			if match:
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   313
				license = match.group(1).replace('&amp;','&')
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   314
				print "*** %s is subject to the %s which you have not yet accepted\n" % (filename,license)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   315
				return False
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   316
			print "*** HTTP response did not contain 'Content-Length' when expected"
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   317
			if options.debug:
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   318
				print info
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   319
				print chunk
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   320
			return False
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   321
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   322
	except urllib2.URLError, e:
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   323
		print '- ERROR: Failed to start downloading ' + filename
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   324
		if hasattr(e, 'reason'):
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   325
			print 'Reason: ', e.reason
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   326
		elif hasattr(e, 'code'):
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   327
			print 'Error code: ', e.code
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   328
		return False
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   329
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   330
	# we are now up and running, and chunk contains the start of the download
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   331
	
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   332
	try:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   333
		fp = open(filename, 'wb')
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   334
		md5 = hashlib.md5()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   335
		while True:
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   336
			fp.write(chunk)
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   337
			md5.update(chunk)
140
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
   338
			size += len(chunk)
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
   339
			now = time.time()
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
   340
			if options.progress and now-last_time > 20:
141
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   341
				rate = (size-last_size)/(now-last_time)
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   342
				estimate = ""
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   343
				if filesize > 0 and rate > 0:
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   344
					remaining_seconds = (filesize-size)/rate
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   345
					if remaining_seconds > 110:
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   346
						remaining = "%d minutes" % (remaining_seconds/60)
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   347
					else:
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   348
						remaining = "%d seconds" % remaining_seconds
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   349
					estimate = "- %d%% est. %s" % ((100*size/filesize), remaining)
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   350
				print "- %d Kb (%d Kb/s) %s" % (size/1024, (rate/1024)+0.5, estimate)
140
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
   351
				last_time = now
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
   352
				last_size = size
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   353
			chunk = response.read(CHUNK)
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   354
			if not chunk: break
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   355
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   356
		fp.close()
141
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   357
		if options.progress:
1ef616833a37 version 0.5.1 - improve the progress reporting, getting the file size from the HTTP message header
William Roberts <williamr@symbian.org>
parents: 140
diff changeset
   358
			now = time.time()
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   359
			print "- Completed %s - %d Kb in %d seconds" % (filename, (filesize/1024)+0.5, now-start_time)
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   360
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   361
	#handle errors
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   362
	except urllib2.URLError, e:
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   363
		print '- ERROR: Failed while downloading ' + filename
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   364
		if hasattr(e, 'reason'):
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   365
			print 'Reason: ', e.reason
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   366
		elif hasattr(e, 'code'):
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   367
			print 'Error code: ', e.code
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   368
		return False
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   369
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   370
	if filename in checksums:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   371
		download_checksum = md5.hexdigest().upper()
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   372
		if download_checksum != checksums[filename]:
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   373
			print '- WARNING: %s checksum does not match' % filename
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   374
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   375
	return True
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   376
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   377
def downloadkit(version):	
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   378
	global headers
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   379
	global options
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   380
	urlbase = top_level_url + '/main/tools_and_kits/downloads/'
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   381
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   382
	viewid = 5   # default to Symbian^3
199
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   383
	if version[0] == '2':
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   384
		viewid= 1  # Symbian^2
199
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   385
	if version[0] == '3':
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   386
		viewid= 5  # Symbian^3
199
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   387
	url = urlbase + ('view.php?id=%d'% viewid)
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   388
	if len(version) > 1:
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   389
		# single character version means "give me the latest"
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   390
		url = url + '&vId=' + version
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   391
125
c107e11c37e8 Mark all requests with the "downloadkit.py script" User Agent string, so that we can spot them in the HTTP logs
William Roberts <williamr@symbian.org>
parents: 124
diff changeset
   392
	req = urllib2.Request(url, None, headers)
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   393
	response = urllib2.urlopen(req)
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   394
	doc=response.read()
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   395
	
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   396
	# BeatifulSoup chokes on some javascript, so we cut away everything before the <body>
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   397
	try:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   398
		bodystart=doc.find('<body>')
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   399
		doc = doc[bodystart:]
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   400
	except:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   401
		pass
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   402
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   403
	if options.debug:
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   404
		f = open("downloadpage.html","w")
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   405
		print >>f, doc 
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   406
		f.close()
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   407
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   408
	soup=BeautifulSoup(doc)
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   409
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   410
	# check that this is the right version
197
04b0678959bf v0.14 - handle the version checking in the "(Public)" download page as well
William Roberts <williamr@symbian.org>
parents: 196
diff changeset
   411
	match = re.search('Platform Release (\(Public\) )?v(\d\.\d\.[0-9a-z]+)', doc, re.IGNORECASE)
199
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   412
	if not match:
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   413
		print "*** ERROR: no version information in the download page"
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   414
		return 0
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   415
		
199
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   416
	if len(version) > 1:
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   417
		if match.group(2) != version:
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   418
			print "*** ERROR: version %s is not available" % version
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   419
			print "*** the website is offering version %s instead" % match.group(2)
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   420
			return 0
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   421
	else:
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   422
		print "The latest version of Symbian^%s is PDK %s" % (version, match.group(2))
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   423
		
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   424
	# let's hope the HTML format never changes...
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   425
	# <a href='download.php?id=27&cid=60&iid=270' title='src_oss_mw.zip'> ...</a> 
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   426
	threadlist = []
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   427
	results=soup.findAll('a', href=re.compile("^download"), title=re.compile("\.(zip|xml)$"))
128
249ca6c587b6 Changes to control the order of downloading, and hopefully the resulting unzipping (for patches in particular)
William Roberts <williamr@symbian.org>
parents: 127
diff changeset
   428
	results.sort(orderResults)
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   429
	for result in results:
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   430
		downloadurl = urlbase + result['href']
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   431
		filename = result['title']
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   432
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   433
		if options.nosrc and re.match(r"(src_sfl|src_oss)", filename) :
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   434
			continue 	# no snapshots of Mercurial source thanks...
171
5f1dcce7f6d4 version 0.10 - add --nowinscw option to avoid winscw binaries, add version to the user-agent string
William Roberts <williamr@symbian.org>
parents: 170
diff changeset
   435
		if options.nowinscw and re.search(r"winscw", filename) :
5f1dcce7f6d4 version 0.10 - add --nowinscw option to avoid winscw binaries, add version to the user-agent string
William Roberts <williamr@symbian.org>
parents: 170
diff changeset
   436
			continue 	# no winscw emulator...
198
90e6dc719131 version 0.15 - add --noarmv5 option to avoid armv5 binaries. using this with --nowinscw also avoids binaries_epoc.zip and binaries_epoc_sdk.zip.
Shabe Razvi <shaber@symbian.org>
parents: 197
diff changeset
   437
		if options.noarmv5 and re.search(r"armv5", filename) :
90e6dc719131 version 0.15 - add --noarmv5 option to avoid armv5 binaries. using this with --nowinscw also avoids binaries_epoc.zip and binaries_epoc_sdk.zip.
Shabe Razvi <shaber@symbian.org>
parents: 197
diff changeset
   438
			continue 	# no armv5 emulator...
90e6dc719131 version 0.15 - add --noarmv5 option to avoid armv5 binaries. using this with --nowinscw also avoids binaries_epoc.zip and binaries_epoc_sdk.zip.
Shabe Razvi <shaber@symbian.org>
parents: 197
diff changeset
   439
		if options.noarmv5 and options.nowinscw and re.search(r"binaries_epoc.zip|binaries_epoc_sdk", filename) :
90e6dc719131 version 0.15 - add --noarmv5 option to avoid armv5 binaries. using this with --nowinscw also avoids binaries_epoc.zip and binaries_epoc_sdk.zip.
Shabe Razvi <shaber@symbian.org>
parents: 197
diff changeset
   440
			continue 	# skip binaries_epoc and binaries_sdk ...
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   441
		if download_file(filename, downloadurl) != True :
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   442
			continue # download failed
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   443
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   444
		# unzip the file (if desired)
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   445
		if re.match(r"patch", filename):
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   446
			complete_outstanding_unzips()	# ensure that the thing we are patching is completed first
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   447
			
156
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   448
		if re.match(r"release_metadata", filename):
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   449
			parse_release_metadata(filename)	# read the md5 checksums etc
0df3a90af030 version 0.7 - add parsing of release_metadata.xml and checking of the MD5 checksums (based on suggested code from ChrisD)
William Roberts <williamr@symbian.org>
parents: 154
diff changeset
   450
		elif re.match(r"(bin|tools).*\.zip", filename):
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   451
			schedule_unzip(filename, 1, 0)   # unzip once, don't delete
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   452
		elif re.match(r"src_.*\.zip", filename):
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   453
			schedule_unzip(filename, 1, 1)   # zip of zips, delete top level
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   454
		elif re.match(r"build_BOM.zip", filename):
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   455
			schedule_unzip(filename, 1, 1)   # unpack then delete zip as it's not needed again
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   456
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   457
	# wait for the unzipping threads to complete
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   458
	complete_outstanding_unzips()  
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   459
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   460
	return 1
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   461
171
5f1dcce7f6d4 version 0.10 - add --nowinscw option to avoid winscw binaries, add version to the user-agent string
William Roberts <williamr@symbian.org>
parents: 170
diff changeset
   462
parser = OptionParser(version="%prog "+version, usage="Usage: %prog [options] version")
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   463
parser.add_option("-n", "--dryrun", action="store_true", dest="dryrun",
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   464
	help="print the files to be downloaded, the 7z commands, and the recommended deletions")
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   465
parser.add_option("--nosrc", action="store_true", dest="nosrc",
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   466
	help="Don't download any of the source code available directly from Mercurial")
171
5f1dcce7f6d4 version 0.10 - add --nowinscw option to avoid winscw binaries, add version to the user-agent string
William Roberts <williamr@symbian.org>
parents: 170
diff changeset
   467
parser.add_option("--nowinscw", action="store_true", dest="nowinscw",
5f1dcce7f6d4 version 0.10 - add --nowinscw option to avoid winscw binaries, add version to the user-agent string
William Roberts <williamr@symbian.org>
parents: 170
diff changeset
   468
	help="Don't download the winscw emulator")
198
90e6dc719131 version 0.15 - add --noarmv5 option to avoid armv5 binaries. using this with --nowinscw also avoids binaries_epoc.zip and binaries_epoc_sdk.zip.
Shabe Razvi <shaber@symbian.org>
parents: 197
diff changeset
   469
parser.add_option("--noarmv5", action="store_true", dest="noarmv5",
90e6dc719131 version 0.15 - add --noarmv5 option to avoid armv5 binaries. using this with --nowinscw also avoids binaries_epoc.zip and binaries_epoc_sdk.zip.
Shabe Razvi <shaber@symbian.org>
parents: 197
diff changeset
   470
	help="Don't download the armv5 binaries")
139
9baccbcc5509 version 0.4 - added --nounzip option to suppress the unzipping and deletion
William Roberts <williamr@symbian.org>
parents: 138
diff changeset
   471
parser.add_option("--nounzip", action="store_true", dest="nounzip",
9baccbcc5509 version 0.4 - added --nounzip option to suppress the unzipping and deletion
William Roberts <williamr@symbian.org>
parents: 138
diff changeset
   472
	help="Just download, don't unzip or delete any files")
153
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   473
parser.add_option("--nodelete", action="store_true", dest="nodelete",
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   474
	help="Do not delete files after unzipping")
140
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
   475
parser.add_option("--progress", action="store_true", dest="progress",
55dd69d60bbc version 0.5 - fix unzipping bug, add "--progress" option for info on long downloads
William Roberts <williamr@symbian.org>
parents: 139
diff changeset
   476
	help="Report download progress")
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   477
parser.add_option("-u", "--username", dest="username", metavar="USER",
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   478
	help="login to website as USER")
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   479
parser.add_option("-p", "--password", dest="password", metavar="PWD",
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   480
	help="specify the account password")
170
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
   481
parser.add_option("--debug", action="store_true", dest="debug", 
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
   482
	help="debug HTML traffic (not recommended!)")
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   483
parser.add_option("--webhost", dest="webhost", metavar="SITE",
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   484
	help="use alternative website (for testing!)")
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   485
parser.set_defaults(
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   486
	dryrun=False, 
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   487
	nosrc=False, 
171
5f1dcce7f6d4 version 0.10 - add --nowinscw option to avoid winscw binaries, add version to the user-agent string
William Roberts <williamr@symbian.org>
parents: 170
diff changeset
   488
	nowinscw=False, 
198
90e6dc719131 version 0.15 - add --noarmv5 option to avoid armv5 binaries. using this with --nowinscw also avoids binaries_epoc.zip and binaries_epoc_sdk.zip.
Shabe Razvi <shaber@symbian.org>
parents: 197
diff changeset
   489
	noarmv5=False, 
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   490
	nounzip=False, 
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   491
	nodelete=False, 
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   492
	progress=False,
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   493
	username='',
170
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
   494
	password='',
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   495
	webhost = 'developer.symbian.org',
170
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
   496
	debug=False
160
fed3f1d2c557 version 0.8 - added command line options for username and password. Revised the exception handling
William Roberts <williamr@symbian.org>
parents: 156
diff changeset
   497
	)
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   498
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   499
(options, args) = parser.parse_args()
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   500
if len(args) != 1:
199
a99c74c53f62 v0.16 - generate correct URL for downloading a specific version, and enable "Latest Symbian^X" functionality.
William Roberts <williamr@symbian.org>
parents: 198
diff changeset
   501
	parser.error("Must supply a PDK version, e.g. 3 or 3.0.h")
153
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   502
if not check_unzip_environment() :
77c25e4f2c6f version 0.6 - avoid problem if Content-Length not supplied, add --nodelete option, check 7z works before starting
William Roberts <williamr@symbian.org>
parents: 141
diff changeset
   503
	parser.error("Unable to execute 7z command")
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   504
193
f74ba2451a44 version 0.12 - add checking for click-through licenses and make sure we get the version we asked for!
William Roberts <williamr@symbian.org>
parents: 174
diff changeset
   505
top_level_url = "https://" + options.webhost
170
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
   506
opener = build_opener(options.debug)
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
   507
urllib2.install_opener(opener)
dd0383270574 version 0.9 - added --debug option to enable urllib2 HTTP debugging
William Roberts <williamr@symbian.org>
parents: 160
diff changeset
   508
174
5ebd70511e4c v0.11 - added quick_networking_check(), to confirm that we can talk to https://developer.symbian.org
William Roberts <williamr@symbian.org>
parents: 171
diff changeset
   509
quick_networking_check()
124
b60a149520e7 Added downloadkit.py - script to download and unpack a PDK
William Roberts <williamr@symbian.org>
parents:
diff changeset
   510
login(True)
138
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   511
downloadkit(args[0])
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   512
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   513
if options.dryrun:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   514
	print "# instructions for downloading kit " + args[0]
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   515
	for download in download_list:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   516
		print download
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   517
	for command in unzip_list:
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   518
		print command
7b2d146ef884 version 0.3 - add command line processing, --dryrun option, --nosrc option
William Roberts <williamr@symbian.org>
parents: 128
diff changeset
   519