From 3feb38d9d47d41e6b0679e3722dedb4511c437f6 Mon Sep 17 00:00:00 2001 From: Matt Martz Date: Fri, 24 Mar 2017 15:30:52 -0500 Subject: [PATCH] Allow skipping download or upload tests. Fixes #377 --- README.rst | 13 ++++++++----- speedtest.py | 46 +++++++++++++++++++++++++++++++--------------- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/README.rst b/README.rst index 1cb1865..817da89 100644 --- a/README.rst +++ b/README.rst @@ -74,10 +74,11 @@ Usage :: $ speedtest-cli -h - usage: speedtest-cli [-h] [--bytes] [--share] [--simple] [--csv] - [--csv-delimiter CSV_DELIMITER] [--csv-header] [--json] - [--list] [--server SERVER] [--mini MINI] [--source SOURCE] - [--timeout TIMEOUT] [--secure] [--version] + usage: speedtest-cli [-h] [--no-download] [--no-upload] [--bytes] [--share] + [--simple] [--csv] [--csv-delimiter CSV_DELIMITER] + [--csv-header] [--json] [--list] [--server SERVER] + [--mini MINI] [--source SOURCE] [--timeout TIMEOUT] + [--secure] [--version] Command line interface for testing internet bandwidth using speedtest.net. -------------------------------------------------------------------------- @@ -85,11 +86,13 @@ Usage optional arguments: -h, --help show this help message and exit + --no-download Do not perform download test + --no-upload Do not perform upload test --bytes Display values in bytes instead of bits. Does not affect the image generated by --share, nor output from --json or --csv --share Generate and provide a URL to the speedtest.net share - results image + results image, not displayed with --csv --simple Suppress verbose output, only show basic information --csv Suppress verbose output, only show basic information in CSV format. Speeds listed in bit/s and not affected diff --git a/speedtest.py b/speedtest.py index 1acfde1..5f1ff8f 100755 --- a/speedtest.py +++ b/speedtest.py @@ -1192,6 +1192,12 @@ def parse_args(): parser.add_argument = parser.add_option except AttributeError: pass + parser.add_argument('--no-download', dest='download', default=True, + action='store_const', const=False, + help='Do not perform download test') + parser.add_argument('--no-upload', dest='upload', default=True, + action='store_const', const=False, + help='Do not perform upload test') parser.add_argument('--bytes', dest='units', action='store_const', const=('byte', 8), default=('bit', 1), help='Display values in bytes instead of bits. Does ' @@ -1288,11 +1294,15 @@ def shell(): if args.version: version() + if not args.download and not args.upload: + raise SpeedtestCLIError('Cannot supply both --no-download and ' + '--no-upload') + if args.csv_header: csv_header() if len(args.csv_delimiter) != 1: - raise SystemExit('--csv-delimiter must be a single character') + raise SpeedtestCLIError('--csv-delimiter must be a single character') validate_optional_args(args) @@ -1388,21 +1398,27 @@ def shell(): printer('Hosted by %(sponsor)s (%(name)s) [%(d)0.2f km]: ' '%(latency)s ms' % results.server, quiet) - printer('Testing download speed', quiet, - end=('', '\n')[bool(debug)]) - speedtest.download(callback=callback) - printer('Download: %0.2f M%s/s' % - ((results.download / 1000.0 / 1000.0) / args.units[1], - args.units[0]), - quiet) + if args.download: + printer('Testing download speed', quiet, + end=('', '\n')[bool(debug)]) + speedtest.download(callback=callback) + printer('Download: %0.2f M%s/s' % + ((results.download / 1000.0 / 1000.0) / args.units[1], + args.units[0]), + quiet) + else: + printer('Skipping download test') - printer('Testing upload speed', quiet, - end=('', '\n')[bool(debug)]) - speedtest.upload(callback=callback) - printer('Upload: %0.2f M%s/s' % - ((results.upload / 1000.0 / 1000.0) / args.units[1], - args.units[0]), - quiet) + if args.upload: + printer('Testing upload speed', quiet, + end=('', '\n')[bool(debug)]) + speedtest.upload(callback=callback) + printer('Upload: %0.2f M%s/s' % + ((results.upload / 1000.0 / 1000.0) / args.units[1], + args.units[0]), + quiet) + else: + printer('Skipping upload test') if args.simple: print_('Ping: %s ms\nDownload: %0.2f M%s/s\nUpload: %0.2f M%s/s' %