]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Fix options with multiple=True on python 3; add tests.
authorBen Darnell <ben@bendarnell.com>
Sun, 28 Apr 2013 21:28:02 +0000 (17:28 -0400)
committerBen Darnell <ben@bendarnell.com>
Sun, 28 Apr 2013 21:28:02 +0000 (17:28 -0400)
tornado/options.py
tornado/test/options_test.py

index b96f815d29da6de5568aff7a7197821767a12487..faf0e164cc83bb3dad923e29df779c752d2cfe71 100644 (file)
@@ -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)
index ba34495d9b1d443354d807355865684f5cffc33d..dc52a82a4992e6749130b5e522780c3989f1db11 100644 (file)
@@ -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])