From 65c85a9b15c14f1c8adc172a2e371b927722f08f Mon Sep 17 00:00:00 2001 From: Matt Martz Date: Wed, 20 Aug 2014 13:11:30 -0500 Subject: [PATCH 1/9] Add timeout argument --- README.rst | 1 + speedtest_cli.py | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/README.rst b/README.rst index 6da05fe..a25f2b2 100644 --- a/README.rst +++ b/README.rst @@ -89,6 +89,7 @@ Usage --server SERVER Specify a server ID to test against --mini MINI URL of the Speedtest Mini server --source SOURCE Source IP address to bind to + --timeout TIMEOUT HTTP timeout in seconds. Default 10 --version Show the version number and exit Inconsistency diff --git a/speedtest_cli.py b/speedtest_cli.py index 105c390..b790b56 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -484,6 +484,8 @@ def speedtest(): parser.add_argument('--server', help='Specify a server ID to test against') parser.add_argument('--mini', help='URL of the Speedtest Mini server') parser.add_argument('--source', help='Source IP address to bind to') + parser.add_argument('--timeout', default=10, type=int, + help='HTTP timeout in seconds. Default 10') parser.add_argument('--version', action='store_true', help='Show the version number and exit') @@ -498,6 +500,8 @@ def speedtest(): if args.version: version() + socket.setdefaulttimeout(args.timeout) + # If specified bind to a specific IP address if args.source: source = args.source From 60c3ec2a5e43daa07d03510a187d8536c68f2b4d Mon Sep 17 00:00:00 2001 From: Matt Martz Date: Wed, 20 Aug 2014 13:12:30 -0500 Subject: [PATCH 2/9] Send custom User-Agent with all http requests. See #86 --- speedtest_cli.py | 44 +++++++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index b790b56..452c3fa 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -18,6 +18,7 @@ __version__ = '0.3.1' # Some global variables we use +user_agent = 'speedtest-cli/%s' % __version__ source = None shutdown_event = None @@ -165,6 +166,17 @@ def distance(origin, destination): return d +def build_request(url, data=None, headers={}): + """Build a urllib2 request object + + This function automatically adds a User-Agent header to all requests + + """ + + headers['User-Agent'] = user_agent + return Request(url, data=data, headers=headers) + + class FileGetter(threading.Thread): """Thread class for retrieving a URL""" @@ -178,7 +190,8 @@ class FileGetter(threading.Thread): self.result = [0] try: if (timeit.default_timer() - self.starttime) <= 10: - f = urlopen(self.url) + request = build_request(self.url) + f = urlopen(request) while 1 and not shutdown_event.isSet(): self.result.append(len(f.read(10240))) if self.result[-1] == 0: @@ -242,7 +255,8 @@ class FilePutter(threading.Thread): try: if ((timeit.default_timer() - self.starttime) <= 10 and not shutdown_event.isSet()): - f = urlopen(self.url, self.data) + request = build_request(self.url, data=self.data) + f = urlopen(request) f.read(11) f.close() self.result = len(self.data) @@ -305,7 +319,8 @@ def getConfig(): we are interested in """ - uh = urlopen('http://www.speedtest.net/speedtest-config.php') + request = build_request('http://www.speedtest.net/speedtest-config.php') + uh = urlopen(request) configxml = [] while 1: configxml.append(uh.read(10240)) @@ -342,7 +357,9 @@ def closestServers(client, all=False): distance """ - uh = urlopen('http://www.speedtest.net/speedtest-servers-static.php') + url = 'http://www.speedtest.net/speedtest-servers-static.php' + request = build_request(url) + uh = urlopen(request) serversxml = [] while 1: serversxml.append(uh.read(10240)) @@ -408,8 +425,9 @@ def getBestServer(servers): h = HTTPSConnection(urlparts[1]) else: h = HTTPConnection(urlparts[1]) + headers = {'User-Agent': user_agent} start = timeit.default_timer() - h.request("GET", urlparts[2]) + h.request("GET", urlparts[2], headers=headers) r = h.getresponse() total = (timeit.default_timer() - start) except (HTTPError, URLError, socket.error): @@ -557,7 +575,8 @@ def speedtest(): url = args.mini urlparts = urlparse(url) try: - f = urlopen(args.mini) + request = build_request(args.mini) + f = urlopen(request) except: print_('Invalid Speedtest Mini URL') sys.exit(1) @@ -568,7 +587,9 @@ def speedtest(): if not extension: for ext in ['php', 'asp', 'aspx', 'jsp']: try: - f = urlopen('%s/speedtest/upload.%s' % (args.mini, ext)) + request = build_request('%s/speedtest/upload.%s' % + (args.mini, ext)) + f = urlopen(request) except: pass else: @@ -663,10 +684,11 @@ def speedtest(): (ping, ulspeedk, dlspeedk, '297aae72')) .encode()).hexdigest()] - req = Request('http://www.speedtest.net/api/api.php', - data='&'.join(apiData).encode()) - req.add_header('Referer', 'http://c.speedtest.net/flash/speedtest.swf') - f = urlopen(req) + headers = {'Referer': 'http://c.speedtest.net/flash/speedtest.swf'} + request = build_request('http://www.speedtest.net/api/api.php', + data='&'.join(apiData).encode(), + headers=headers) + f = urlopen(request) response = f.read() code = f.code f.close() From b0e1e58a0b5d480836d4b4e450fc045ed08201c5 Mon Sep 17 00:00:00 2001 From: Matt Martz Date: Tue, 2 Sep 2014 15:06:14 -0500 Subject: [PATCH 3/9] s/bytes/byte/ and s/bits/bit/. Fixes #89 --- speedtest_cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index 452c3fa..10e0889 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -487,7 +487,7 @@ def speedtest(): except AttributeError: pass parser.add_argument('--bytes', dest='units', action='store_const', - const=('bytes', 1), default=('bits', 8), + const=('byte', 1), default=('bit', 8), help='Display values in bytes instead of bits. Does ' 'not affect the image generated by --share') parser.add_argument('--share', action='store_true', From af2c4d14f6bae55c5c3cc37ca1d03e87a361d974 Mon Sep 17 00:00:00 2001 From: Andrew Cammell Date: Sat, 4 Oct 2014 11:33:10 +0800 Subject: [PATCH 4/9] New cmd line parameter to allow saving of test results to a text file in csv format. New results are appended to the file. --- speedtest_cli.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index 10e0889..a906585 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -500,6 +500,8 @@ def speedtest(): help='Display a list of speedtest.net servers ' 'sorted by distance') parser.add_argument('--server', help='Specify a server ID to test against') + parser.add_argument('--saveresults', help='Specify a file to save the speedtest.net ' + 'results') parser.add_argument('--mini', help='URL of the Speedtest Mini server') parser.add_argument('--source', help='Source IP address to bind to') parser.add_argument('--timeout', default=10, type=int, @@ -642,10 +644,10 @@ def speedtest(): if not args.simple: print_('Testing download speed', end='') dlspeed = downloadSpeed(urls, args.simple) + dlspdstr = '%0.2f M%s/s' % ((dlspeed / 1000 / 1000) * args.units[1], args.units[0]) if not args.simple: print_() - print_('Download: %0.2f M%s/s' % - ((dlspeed / 1000 / 1000) * args.units[1], args.units[0])) + print_('Download: %s' % dlspdstr) sizesizes = [int(.25 * 1000 * 1000), int(.5 * 1000 * 1000)] sizes = [] @@ -655,10 +657,22 @@ def speedtest(): if not args.simple: print_('Testing upload speed', end='') ulspeed = uploadSpeed(best['url'], sizes, args.simple) + ulspdstr = '%0.2f M%s/s' % ((ulspeed / 1000 / 1000) * args.units[1], args.units[0]) if not args.simple: print_() - print_('Upload: %0.2f M%s/s' % - ((ulspeed / 1000 / 1000) * args.units[1], args.units[0])) + print_('Upload: %s' % ulspdstr) + + # Save test results + if args.saveresults != None: + if not args.simple: + print_('Saving test results to %s' % args.saveresults) + try: + resfile = open(args.saveresults, 'a') + except: + print_('Unable to open results file') + sys.exit(1) + resfile.write(('%(id)s,%(sponsor)s,%(name)s,%(country)s,%(latency)s ms,' % best) + ('%s,%s\n' % (dlspdstr, ulspdstr))) + resfile.close() if args.share and args.mini: print_('Cannot generate a speedtest.net share results image while ' From 8962060b4d4345b0c1386b51f8d1adac1065a6e5 Mon Sep 17 00:00:00 2001 From: Andrew Cammell Date: Sat, 4 Oct 2014 13:28:26 +0800 Subject: [PATCH 5/9] Load, Save and Show Speedtest.net configuration --- speedtest_cli.py | 50 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index 10e0889..5f0a256 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -30,6 +30,7 @@ import signal import socket import timeit import threading +from json import dump as jsonDump, load as jsonLoad # Used for bound_interface socket_socket = socket.socket @@ -496,6 +497,12 @@ def speedtest(): parser.add_argument('--simple', action='store_true', help='Suppress verbose output, only show basic ' 'information') + parser.add_argument('--showconfig', action='store_true', + help='Display the client configuration') + parser.add_argument('--saveconfig', help='Specify a file to save the speedtest.net ' + 'configuration') + parser.add_argument('--loadconfig', help='Specify a file to load the speedtest.net ' + 'configuration') parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') @@ -525,13 +532,42 @@ def speedtest(): source = args.source socket.socket = bound_socket - if not args.simple: - print_('Retrieving speedtest.net configuration...') - try: - config = getConfig() - except URLError: - print_('Cannot retrieve speedtest configuration') - sys.exit(1) + # Retrieve speedtest configuration + if args.loadconfig == None: + if not args.simple: + print_('Retrieving speedtest.net configuration...') + try: + config = getConfig() + except URLError: + print_('Cannot retrieve speedtest configuration') + sys.exit(1) + + if args.saveconfig != None: + if not args.simple: + print_('Saving speedtest.net configuration to %s' % args.saveconfig) + try: + configfile = open(args.saveconfig, 'w') + except: + print_('Unable to open configuration file %s' % args.saveconfig) + sys.exit(1) + jsonDump(config, configfile) + configfile.close() + else: + if not args.simple: + print_('Loading speedtest.net configuration from %s' % args.loadconfig) + try: + confFile = open(args.loadconfig, 'r') + except: + print_('Unable to open configuration file %s' % args.loadconfig) + sys.exit(1) + config = jsonLoad(confFile) + confFile.close() + + if args.showconfig: + print_('Speedtest.net configuration:') + for configitem in config: + print_(' %s: %s' % (configitem, config[configitem])) + sys.exit(0) if not args.simple: print_('Retrieving speedtest.net server list...') From 066f8acaadada8a1f3931efbe46e3f4073b994a6 Mon Sep 17 00:00:00 2001 From: Andrew Cammell Date: Sun, 5 Oct 2014 13:20:43 +0800 Subject: [PATCH 6/9] Load, Save and List servers --- speedtest_cli.py | 60 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index 10e0889..6e2d7a9 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -30,6 +30,7 @@ import signal import socket import timeit import threading +from json import dump as jsonDump, load as jsonLoad # Used for bound_interface socket_socket = socket.socket @@ -352,9 +353,10 @@ def getConfig(): return config -def closestServers(client, all=False): - """Determine the 5 closest speedtest.net servers based on geographic - distance +def closestServers(client, numServers = 5): + """Determine the closest speedtest.net servers based on geographic + distance. The default number of servers to return is 5. If the + number of servers is specified as 0 then all servers are returned. """ url = 'http://www.speedtest.net/speedtest-servers-static.php' @@ -399,7 +401,7 @@ def closestServers(client, all=False): for d in sorted(servers.keys()): for s in servers[d]: closest.append(s) - if len(closest) == 5 and not all: + if len(closest) == numServers and numServers != 0: break else: continue @@ -499,6 +501,13 @@ def speedtest(): parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') + parser.add_argument('--listservers', action='store_true', + help='Display a list of speedtest.net servers ' + 'sorted by distance. Synonym for --list') + parser.add_argument('--saveservers', help='Specify a file to save the speedtest.net ' + 'servers list to') + parser.add_argument('--loadservers', help='Specify a file of speedtest.net servers ' + 'to use instead of downloading the list') parser.add_argument('--server', help='Specify a server ID to test against') parser.add_argument('--mini', help='URL of the Speedtest Mini server') parser.add_argument('--source', help='Source IP address to bind to') @@ -533,11 +542,14 @@ def speedtest(): print_('Cannot retrieve speedtest configuration') sys.exit(1) - if not args.simple: - print_('Retrieving speedtest.net server list...') - if args.list or args.server: - servers = closestServers(config['client'], True) - if args.list: + # Retrieve speedtest server list + if args.list or args.listservers or args.saveservers != None or (args.server and args.loadservers == None): + if not args.simple: + print_('Retrieving speedtest.net server list...') + servers = closestServers(config['client'], 0) # return all servers + + # Display the server list and exit + if args.list or args.listservers: serverList = [] for server in servers: line = ('%(id)4s) %(sponsor)s (%(name)s, %(country)s) ' @@ -554,8 +566,36 @@ def speedtest(): except IOError: pass sys.exit(0) + elif args.saveservers != None: + if not args.simple: + print_('Saving speedtest.net server list to %s...' % args.saveservers) + try: + svrFile = open(args.saveservers, 'w') + except: + print_('Unable to open server file') + sys.exit(1) + jsonDump(servers, svrFile) + svrFile.close() + print_('Done') + sys.exit(0) + elif args.loadservers != None: + if not args.simple: + print_('Loading speedtest.net server list from %s' % args.loadservers) + try: + svrFile = open(args.loadservers, 'r') + except: + print_('Unable to open server file') + sys.exit(1) + allServers = jsonLoad(svrFile) + svrFile.close() + if len(allServers) > 10: + servers = allServers[:5] + else: + servers = allServers else: - servers = closestServers(config['client']) + if not args.simple: + print_('Retrieving speedtest.net server list...') + servers = closestServers(config['client']) # return closest 5 servers if not args.simple: print_('Testing from %(isp)s (%(ip)s)...' % config['client']) From bd91409d722d2b7f577722233fb706b7604c51e1 Mon Sep 17 00:00:00 2001 From: Andrew Cammell Date: Sun, 5 Oct 2014 13:51:32 +0800 Subject: [PATCH 7/9] Made changes needed by pep8 --- speedtest_cli.py | 64 ++++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index 976d368..7175270 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -353,7 +353,7 @@ def getConfig(): return config -def closestServers(client, numServers = 5): +def closestServers(client, numServers=5): """Determine the closest speedtest.net servers based on geographic distance. The default number of servers to return is 5. If the number of servers is specified as 0 then all servers are returned. @@ -500,23 +500,23 @@ def speedtest(): 'information') parser.add_argument('--showconfig', action='store_true', help='Display the client configuration') - parser.add_argument('--saveconfig', help='Specify a file to save the speedtest.net ' - 'configuration') - parser.add_argument('--loadconfig', help='Specify a file to load the speedtest.net ' - 'configuration') + parser.add_argument('--saveconfig', help='Specify a file to save the ' + 'speedtest.net configuration') + parser.add_argument('--loadconfig', help='Specify a file to load the ' + 'speedtest.net configuration') parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') parser.add_argument('--listservers', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance. Synonym for --list') - parser.add_argument('--saveservers', help='Specify a file to save the speedtest.net ' - 'servers list to') - parser.add_argument('--loadservers', help='Specify a file of speedtest.net servers ' - 'to use instead of downloading the list') + parser.add_argument('--saveservers', help='Specify a file to save the ' + 'speedtest.net servers list') + parser.add_argument('--loadservers', help='Specify a file of speedtest.net' + ' servers to use instead of downloading the list') parser.add_argument('--server', help='Specify a server ID to test against') - parser.add_argument('--saveresults', help='Specify a file to save the speedtest.net ' - 'results') + parser.add_argument('--saveresults', help='Specify a file to save the ' + 'speedtest.net results') parser.add_argument('--mini', help='URL of the Speedtest Mini server') parser.add_argument('--source', help='Source IP address to bind to') parser.add_argument('--timeout', default=10, type=int, @@ -543,7 +543,7 @@ def speedtest(): socket.socket = bound_socket # Retrieve speedtest configuration - if args.loadconfig == None: + if args.loadconfig is None: if not args.simple: print_('Retrieving speedtest.net configuration...') try: @@ -552,19 +552,22 @@ def speedtest(): print_('Cannot retrieve speedtest configuration') sys.exit(1) - if args.saveconfig != None: + if args.saveconfig is not None: if not args.simple: - print_('Saving speedtest.net configuration to %s' % args.saveconfig) + print_('Saving speedtest.net configuration to %s' + % args.saveconfig) try: configfile = open(args.saveconfig, 'w') except: - print_('Unable to open configuration file %s' % args.saveconfig) + print_('Unable to open configuration file %s' + % args.saveconfig) sys.exit(1) jsonDump(config, configfile) configfile.close() else: if not args.simple: - print_('Loading speedtest.net configuration from %s' % args.loadconfig) + print_('Loading speedtest.net configuration from %s' + % args.loadconfig) try: confFile = open(args.loadconfig, 'r') except: @@ -580,10 +583,11 @@ def speedtest(): sys.exit(0) # Retrieve speedtest server list - if args.list or args.listservers or args.saveservers != None or (args.server and args.loadservers == None): + if args.list or args.listservers or args.saveservers is not None + or (args.server and args.loadservers is None): if not args.simple: print_('Retrieving speedtest.net server list...') - servers = closestServers(config['client'], 0) # return all servers + servers = closestServers(config['client'], 0) # return all servers # Display the server list and exit if args.list or args.listservers: @@ -603,9 +607,10 @@ def speedtest(): except IOError: pass sys.exit(0) - elif args.saveservers != None: + elif args.saveservers is not None: if not args.simple: - print_('Saving speedtest.net server list to %s...' % args.saveservers) + print_('Saving speedtest.net server list to %s...' + % args.saveservers) try: svrFile = open(args.saveservers, 'w') except: @@ -615,9 +620,10 @@ def speedtest(): svrFile.close() print_('Done') sys.exit(0) - elif args.loadservers != None: + elif args.loadservers is not None: if not args.simple: - print_('Loading speedtest.net server list from %s' % args.loadservers) + print_('Loading speedtest.net server list from %s' + % args.loadservers) try: svrFile = open(args.loadservers, 'r') except: @@ -632,7 +638,7 @@ def speedtest(): else: if not args.simple: print_('Retrieving speedtest.net server list...') - servers = closestServers(config['client']) # return closest 5 servers + servers = closestServers(config['client']) # return closest 5 servers if not args.simple: print_('Testing from %(isp)s (%(ip)s)...' % config['client']) @@ -719,7 +725,8 @@ def speedtest(): if not args.simple: print_('Testing download speed', end='') dlspeed = downloadSpeed(urls, args.simple) - dlspdstr = '%0.2f M%s/s' % ((dlspeed / 1000 / 1000) * args.units[1], args.units[0]) + dlspdstr = '%0.2f M%s/s' % ((dlspeed / 1000 / 1000) + * args.units[1], args.units[0]) if not args.simple: print_() print_('Download: %s' % dlspdstr) @@ -732,13 +739,14 @@ def speedtest(): if not args.simple: print_('Testing upload speed', end='') ulspeed = uploadSpeed(best['url'], sizes, args.simple) - ulspdstr = '%0.2f M%s/s' % ((ulspeed / 1000 / 1000) * args.units[1], args.units[0]) + ulspdstr = '%0.2f M%s/s' % ((ulspeed / 1000 / 1000) + * args.units[1], args.units[0]) if not args.simple: print_() print_('Upload: %s' % ulspdstr) # Save test results - if args.saveresults != None: + if args.saveresults is not None: if not args.simple: print_('Saving test results to %s' % args.saveresults) try: @@ -746,7 +754,9 @@ def speedtest(): except: print_('Unable to open results file') sys.exit(1) - resfile.write(('%(id)s,%(sponsor)s,%(name)s,%(country)s,%(latency)s ms,' % best) + ('%s,%s\n' % (dlspdstr, ulspdstr))) + resfile.write(('%(id)s,%(sponsor)s,%(name)s,%(country)s,' + '%(latency)s ms,' % best) + ('%s,%s\n' + % (dlspdstr, ulspdstr))) resfile.close() if args.share and args.mini: From b216b69a79749572e087e931bb646c40b06599c2 Mon Sep 17 00:00:00 2001 From: Andrew Cammell Date: Sun, 5 Oct 2014 13:51:32 +0800 Subject: [PATCH 8/9] Made changes needed by pep8 --- speedtest_cli.py | 64 ++++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index 976d368..d702174 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -353,7 +353,7 @@ def getConfig(): return config -def closestServers(client, numServers = 5): +def closestServers(client, numServers=5): """Determine the closest speedtest.net servers based on geographic distance. The default number of servers to return is 5. If the number of servers is specified as 0 then all servers are returned. @@ -500,23 +500,23 @@ def speedtest(): 'information') parser.add_argument('--showconfig', action='store_true', help='Display the client configuration') - parser.add_argument('--saveconfig', help='Specify a file to save the speedtest.net ' - 'configuration') - parser.add_argument('--loadconfig', help='Specify a file to load the speedtest.net ' - 'configuration') + parser.add_argument('--saveconfig', help='Specify a file to save the ' + 'speedtest.net configuration') + parser.add_argument('--loadconfig', help='Specify a file to load the ' + 'speedtest.net configuration') parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') parser.add_argument('--listservers', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance. Synonym for --list') - parser.add_argument('--saveservers', help='Specify a file to save the speedtest.net ' - 'servers list to') - parser.add_argument('--loadservers', help='Specify a file of speedtest.net servers ' - 'to use instead of downloading the list') + parser.add_argument('--saveservers', help='Specify a file to save the ' + 'speedtest.net servers list') + parser.add_argument('--loadservers', help='Specify a file of speedtest.net' + ' servers to use instead of downloading the list') parser.add_argument('--server', help='Specify a server ID to test against') - parser.add_argument('--saveresults', help='Specify a file to save the speedtest.net ' - 'results') + parser.add_argument('--saveresults', help='Specify a file to save the ' + 'speedtest.net results') parser.add_argument('--mini', help='URL of the Speedtest Mini server') parser.add_argument('--source', help='Source IP address to bind to') parser.add_argument('--timeout', default=10, type=int, @@ -543,7 +543,7 @@ def speedtest(): socket.socket = bound_socket # Retrieve speedtest configuration - if args.loadconfig == None: + if args.loadconfig is None: if not args.simple: print_('Retrieving speedtest.net configuration...') try: @@ -552,19 +552,22 @@ def speedtest(): print_('Cannot retrieve speedtest configuration') sys.exit(1) - if args.saveconfig != None: + if args.saveconfig is not None: if not args.simple: - print_('Saving speedtest.net configuration to %s' % args.saveconfig) + print_('Saving speedtest.net configuration to %s' + % args.saveconfig) try: configfile = open(args.saveconfig, 'w') except: - print_('Unable to open configuration file %s' % args.saveconfig) + print_('Unable to open configuration file %s' + % args.saveconfig) sys.exit(1) jsonDump(config, configfile) configfile.close() else: if not args.simple: - print_('Loading speedtest.net configuration from %s' % args.loadconfig) + print_('Loading speedtest.net configuration from %s' + % args.loadconfig) try: confFile = open(args.loadconfig, 'r') except: @@ -580,10 +583,11 @@ def speedtest(): sys.exit(0) # Retrieve speedtest server list - if args.list or args.listservers or args.saveservers != None or (args.server and args.loadservers == None): + if (args.list or args.listservers or args.saveservers is not None + or (args.server and args.loadservers is None)): if not args.simple: print_('Retrieving speedtest.net server list...') - servers = closestServers(config['client'], 0) # return all servers + servers = closestServers(config['client'], 0) # return all servers # Display the server list and exit if args.list or args.listservers: @@ -603,9 +607,10 @@ def speedtest(): except IOError: pass sys.exit(0) - elif args.saveservers != None: + elif args.saveservers is not None: if not args.simple: - print_('Saving speedtest.net server list to %s...' % args.saveservers) + print_('Saving speedtest.net server list to %s...' + % args.saveservers) try: svrFile = open(args.saveservers, 'w') except: @@ -615,9 +620,10 @@ def speedtest(): svrFile.close() print_('Done') sys.exit(0) - elif args.loadservers != None: + elif args.loadservers is not None: if not args.simple: - print_('Loading speedtest.net server list from %s' % args.loadservers) + print_('Loading speedtest.net server list from %s' + % args.loadservers) try: svrFile = open(args.loadservers, 'r') except: @@ -632,7 +638,7 @@ def speedtest(): else: if not args.simple: print_('Retrieving speedtest.net server list...') - servers = closestServers(config['client']) # return closest 5 servers + servers = closestServers(config['client']) # return closest 5 servers if not args.simple: print_('Testing from %(isp)s (%(ip)s)...' % config['client']) @@ -719,7 +725,8 @@ def speedtest(): if not args.simple: print_('Testing download speed', end='') dlspeed = downloadSpeed(urls, args.simple) - dlspdstr = '%0.2f M%s/s' % ((dlspeed / 1000 / 1000) * args.units[1], args.units[0]) + dlspdstr = '%0.2f M%s/s' % ((dlspeed / 1000 / 1000) + * args.units[1], args.units[0]) if not args.simple: print_() print_('Download: %s' % dlspdstr) @@ -732,13 +739,14 @@ def speedtest(): if not args.simple: print_('Testing upload speed', end='') ulspeed = uploadSpeed(best['url'], sizes, args.simple) - ulspdstr = '%0.2f M%s/s' % ((ulspeed / 1000 / 1000) * args.units[1], args.units[0]) + ulspdstr = '%0.2f M%s/s' % ((ulspeed / 1000 / 1000) + * args.units[1], args.units[0]) if not args.simple: print_() print_('Upload: %s' % ulspdstr) # Save test results - if args.saveresults != None: + if args.saveresults is not None: if not args.simple: print_('Saving test results to %s' % args.saveresults) try: @@ -746,7 +754,9 @@ def speedtest(): except: print_('Unable to open results file') sys.exit(1) - resfile.write(('%(id)s,%(sponsor)s,%(name)s,%(country)s,%(latency)s ms,' % best) + ('%s,%s\n' % (dlspdstr, ulspdstr))) + resfile.write(('%(id)s,%(sponsor)s,%(name)s,%(country)s,' + '%(latency)s ms,' % best) + ('%s,%s\n' + % (dlspdstr, ulspdstr))) resfile.close() if args.share and args.mini: From ad57c7cf2e53fdb8e8ba512bd31e44e59bc88204 Mon Sep 17 00:00:00 2001 From: Andrew Cammell Date: Tue, 7 Oct 2014 20:48:38 +0800 Subject: [PATCH 9/9] Remove use of json so as to support python 2.4 and 2.5 --- speedtest_cli.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/speedtest_cli.py b/speedtest_cli.py index d702174..16d4341 100755 --- a/speedtest_cli.py +++ b/speedtest_cli.py @@ -30,7 +30,6 @@ import signal import socket import timeit import threading -from json import dump as jsonDump, load as jsonLoad # Used for bound_interface socket_socket = socket.socket @@ -562,7 +561,7 @@ def speedtest(): print_('Unable to open configuration file %s' % args.saveconfig) sys.exit(1) - jsonDump(config, configfile) + configfile.write(str(config)) configfile.close() else: if not args.simple: @@ -573,7 +572,7 @@ def speedtest(): except: print_('Unable to open configuration file %s' % args.loadconfig) sys.exit(1) - config = jsonLoad(confFile) + config = eval(confFile.read()) confFile.close() if args.showconfig: @@ -616,7 +615,7 @@ def speedtest(): except: print_('Unable to open server file') sys.exit(1) - jsonDump(servers, svrFile) + svrFile.write(str(servers)) svrFile.close() print_('Done') sys.exit(0) @@ -629,7 +628,7 @@ def speedtest(): except: print_('Unable to open server file') sys.exit(1) - allServers = jsonLoad(svrFile) + allServers = eval(svrFile.read()) svrFile.close() if len(allServers) > 10: servers = allServers[:5]