From: Ben Darnell Date: Sun, 28 Apr 2013 21:28:02 +0000 (-0400) Subject: Fix options with multiple=True on python 3; add tests. X-Git-Tag: v3.1.0~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13aa5a18568b9a3bcdfa9be518f87339311c7ad3;p=thirdparty%2Ftornado.git Fix options with multiple=True on python 3; add tests. --- diff --git a/tornado/options.py b/tornado/options.py index b96f815d2..faf0e164c 100644 --- a/tornado/options.py +++ b/tornado/options.py @@ -61,6 +61,7 @@ instances to define isolated sets of options, such as for subcommands. from __future__ import absolute_import, division, print_function, with_statement import datetime +import numbers import re import sys import os @@ -339,7 +340,7 @@ class _Option(object): if self.multiple: self._value = [] for part in value.split(","): - if self.type in (int, long): + if issubclass(self.type, numbers.Integral): # allow ranges of the form X:Y (inclusive at both ends) lo, _, hi = part.partition(":") lo = _parse(lo) diff --git a/tornado/test/options_test.py b/tornado/test/options_test.py index ba34495d9..dc52a82a4 100644 --- a/tornado/test/options_test.py +++ b/tornado/test/options_test.py @@ -1,9 +1,11 @@ from __future__ import absolute_import, division, print_function, with_statement +import datetime import os import sys from tornado.options import OptionParser, Error +from tornado.util import basestring_type from tornado.test.util import unittest try: @@ -132,3 +134,38 @@ class OptionsTest(unittest.TestCase): self.assertEqual(options.foo, 6) self.assertEqual(options.foo, 5) self.assertEqual(options.foo, 2) + + def test_types(self): + options = OptionParser() + options.define('str', type=str) + options.define('basestring', type=basestring_type) + options.define('int', type=int) + options.define('float', type=float) + options.define('datetime', type=datetime.datetime) + options.define('timedelta', type=datetime.timedelta) + options.parse_command_line(['main.py', + '--str=asdf', + '--basestring=qwer', + '--int=42', + '--float=1.5', + '--datetime=2013-04-28 05:16', + '--timedelta=45s']) + self.assertEqual(options.str, 'asdf') + self.assertEqual(options.basestring, 'qwer') + self.assertEqual(options.int, 42) + self.assertEqual(options.float, 1.5) + self.assertEqual(options.datetime, + datetime.datetime(2013, 4, 28, 5, 16)) + self.assertEqual(options.timedelta, datetime.timedelta(seconds=45)) + + def test_multiple_string(self): + options = OptionParser() + options.define('foo', type=str, multiple=True) + options.parse_command_line(['main.py', '--foo=a,b,c']) + self.assertEqual(options.foo, ['a', 'b', 'c']) + + def test_multiple_int(self): + options = OptionParser() + options.define('foo', type=int, multiple=True) + options.parse_command_line(['main.py', '--foo=1,3,5:7']) + self.assertEqual(options.foo, [1, 3, 5, 6, 7])