From 8fcd4a019ecbccd7525c690f5ca87cbebb2416b5 Mon Sep 17 00:00:00 2001 From: Windows81 Date: Wed, 28 Jul 2021 22:34:52 +0000 Subject: [PATCH 1/2] Added additional unit flexibility for download/upload speeds. --- speedtest.py | 46 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/speedtest.py b/speedtest.py index 186b529..2e4f06c 100755 --- a/speedtest.py +++ b/speedtest.py @@ -59,6 +59,18 @@ PY25PLUS = sys.version_info[:2] >= (2, 5) PY26PLUS = sys.version_info[:2] >= (2, 6) PY32PLUS = sys.version_info[:2] >= (3, 2) PY310PLUS = sys.version_info[:2] >= (3, 10) +SIZEMAP = { + "Mibyte": 8. * 1024 * 1024, + "Mbyte": 8. * 1000 * 1000, + "Mibit": 1. * 1024 * 1024, + "Mbit": 1. * 1000 * 1000, + "Kibyte": 8. * 1024, + "Kbyte": 8. * 1000, + "Kibit": 1. * 1024, + "Kbit": 1. * 1000, + "byte": 8., + "bit": 1., +} # Begin import game to handle Python 2 and Python 3 try: @@ -1733,11 +1745,14 @@ def parse_args(): help='Only use a single connection instead of ' 'multiple. This simulates a typical file ' 'transfer.') - parser.add_argument('--bytes', dest='units', action='store_const', - const=('byte', 8), default=('bit', 1), + parser.add_argument('--bytes', default=False, action='store_true', help='Display values in bytes instead of bits. Does ' 'not affect the image generated by --share, nor ' 'output from --json or --csv') + parser.add_argument('--units', choices=tuple(SIZEMAP), + help='Determines which units to display values in. Does ' + 'not affect the image generated by --share, nor ' + 'output from --json or --csv') parser.add_argument('--share', action='store_true', help='Generate and provide a URL to the speedtest.net ' 'share results image, not displayed with --csv') @@ -1747,7 +1762,7 @@ def parse_args(): parser.add_argument('--csv', action='store_true', default=False, help='Suppress verbose output, only show basic ' 'information in CSV format. Speeds listed in ' - 'bit/s and not affected by --bytes') + 'bit/s and not affected by --bytes or --units') parser.add_argument('--csv-delimiter', default=',', type=PARSER_TYPE_STR, help='Single character delimiter to use in CSV ' 'output. Default ","') @@ -1756,7 +1771,7 @@ def parse_args(): parser.add_argument('--json', action='store_true', default=False, help='Suppress verbose output, only show basic ' 'information in JSON format. Speeds listed in ' - 'bit/s and not affected by --bytes') + 'bit/s and not affected by --bytes or --units') parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') @@ -1850,6 +1865,10 @@ def shell(): raise SpeedtestCLIError('Cannot supply both --no-download and ' '--no-upload') + if not args.bytes and not args.units: + raise SpeedtestCLIError('Cannot supply both --bytes and ' + '--units') + if len(args.csv_delimiter) != 1: raise SpeedtestCLIError('--csv-delimiter must be a single character') @@ -1864,6 +1883,13 @@ def shell(): if debug: DEBUG = True + if args.bytes: + units = 'Mbyte' + elif args.units: + units = args.units + else: + units = 'Mbit' + if args.simple or args.csv or args.json: quiet = True else: @@ -1951,9 +1977,9 @@ def shell(): callback=callback, threads=(None, 1)[args.single] ) - printer('Download: %0.2f M%s/s' % - ((results.download / 1000.0 / 1000.0) / args.units[1], - args.units[0]), + printer('Download: %0.2f %s/s' % + (results.download / SIZEMAP[units], + units), quiet) else: printer('Skipping download test', quiet) @@ -1966,9 +1992,9 @@ def shell(): pre_allocate=args.pre_allocate, threads=(None, 1)[args.single] ) - printer('Upload: %0.2f M%s/s' % - ((results.upload / 1000.0 / 1000.0) / args.units[1], - args.units[0]), + printer('Upload: %0.2f %s/s' % + (results.upload / SIZEMAP[units], + units), quiet) else: printer('Skipping upload test', quiet) From f317af3bf42729616b538e6227cdca29c1cb1578 Mon Sep 17 00:00:00 2001 From: Windows81 Date: Sun, 19 Sep 2021 16:47:03 +0000 Subject: [PATCH 2/2] Fixed cases where --bytes and --units are both not supplied. --- speedtest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/speedtest.py b/speedtest.py index 2e4f06c..7a5cc60 100755 --- a/speedtest.py +++ b/speedtest.py @@ -1865,7 +1865,7 @@ def shell(): raise SpeedtestCLIError('Cannot supply both --no-download and ' '--no-upload') - if not args.bytes and not args.units: + if args.bytes and args.units: raise SpeedtestCLIError('Cannot supply both --bytes and ' '--units')