From 0ed780bb4d267368ec55d8bfef808199ead3205f Mon Sep 17 00:00:00 2001 From: Alexandr K Date: Sat, 13 May 2017 16:36:35 +0300 Subject: [PATCH 1/3] The Server parameter takes a name. --- README.rst | 2 +- speedtest.py | 26 +++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index 0043b5c..25fbc0b 100644 --- a/README.rst +++ b/README.rst @@ -106,7 +106,7 @@ Usage affected by --bytes --list Display a list of speedtest.net servers sorted by distance - --server SERVER Specify a server ID to test against + --server SERVER Specify a server ID (or city name) 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 diff --git a/speedtest.py b/speedtest.py index 8b8526a..faa8628 100755 --- a/speedtest.py +++ b/speedtest.py @@ -1269,8 +1269,8 @@ def parse_args(): parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') - parser.add_argument('--server', help='Specify a server ID to test against', - type=PARSER_TYPE_INT) + parser.add_argument('--server', help='Specify a server ID (or city name) to test against', + type=PARSER_TYPE_STR) 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=PARSER_TYPE_INT, @@ -1421,7 +1421,27 @@ def shell(): # Set a filter of servers to retrieve servers = [] if args.server: - servers.append(args.server) + if (args.server.isnumeric()): + servers.append(int(args.server)) + else: # Find the server ID by name + printer('Search for a server with the specified name...', quiet) + try: + speedtest.get_servers() + except (ServersRetrievalError, HTTP_ERRORS): + print_('Cannot retrieve speedtest server list') + raise SpeedtestCLIError(get_exception()) + + for _, items in sorted(speedtest.servers.items()): + for server in items: + if (server['name'].lower() == args.server.lower()): + servers.append(int(server['id'])) + break + else: + continue + break + + if not servers: + raise SpeedtestCLIError('Server was not found: %s' % args.server) printer('Testing from %(isp)s (%(ip)s)...' % speedtest.config['client'], quiet) From a0ccd6a166401ae3b426ce2e10936765ad976ac3 Mon Sep 17 00:00:00 2001 From: Alexandr K Date: Sat, 13 May 2017 16:53:24 +0300 Subject: [PATCH 2/3] Refactoring for PEP8 --- speedtest.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/speedtest.py b/speedtest.py index faa8628..10d4c45 100755 --- a/speedtest.py +++ b/speedtest.py @@ -1269,7 +1269,8 @@ def parse_args(): parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') - parser.add_argument('--server', help='Specify a server ID (or city name) to test against', + parser.add_argument('--server', help='Specify a server ID (or city name) ' + 'to test against', type=PARSER_TYPE_STR) parser.add_argument('--mini', help='URL of the Speedtest Mini server') parser.add_argument('--source', help='Source IP address to bind to') @@ -1423,7 +1424,7 @@ def shell(): if args.server: if (args.server.isnumeric()): servers.append(int(args.server)) - else: # Find the server ID by name + else: # Find the server ID by name printer('Search for a server with the specified name...', quiet) try: speedtest.get_servers() @@ -1441,7 +1442,8 @@ def shell(): break if not servers: - raise SpeedtestCLIError('Server was not found: %s' % args.server) + raise SpeedtestCLIError('Server was not found: ' + '%s' % args.server) printer('Testing from %(isp)s (%(ip)s)...' % speedtest.config['client'], quiet) From f72c77ee1b9a47ae96671904105639b9ddefc351 Mon Sep 17 00:00:00 2001 From: Alexandr K Date: Sat, 13 May 2017 20:22:51 +0300 Subject: [PATCH 3/3] Restored the selection of the best server for searching by name --- speedtest.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/speedtest.py b/speedtest.py index 10d4c45..81bf2ff 100755 --- a/speedtest.py +++ b/speedtest.py @@ -1432,14 +1432,10 @@ def shell(): print_('Cannot retrieve speedtest server list') raise SpeedtestCLIError(get_exception()) - for _, items in sorted(speedtest.servers.items()): + for _, items in speedtest.servers.items(): for server in items: if (server['name'].lower() == args.server.lower()): servers.append(int(server['id'])) - break - else: - continue - break if not servers: raise SpeedtestCLIError('Server was not found: '