summary refs log tree commit diff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2019-12-15 23:15:24 +0700
committerSergey M․ <dstftw@gmail.com>2019-12-15 23:15:24 +0700
commit42db58ec7367e7ee6555e5f14107712add61d013 (patch)
tree9af78bcdd1121277ebd14be175119604c6a7fa5c
parent73d8f3a63426e8517143e3a5554e12d614c5cdec (diff)
downloadyoutube-dl-42db58ec7367e7ee6555e5f14107712add61d013.tar.gz
youtube-dl-42db58ec7367e7ee6555e5f14107712add61d013.tar.xz
youtube-dl-42db58ec7367e7ee6555e5f14107712add61d013.zip
[utils] Improve str_to_int
-rw-r--r--test/test_utils.py5
-rw-r--r--youtube_dl/utils.py8
2 files changed, 10 insertions, 3 deletions
diff --git a/test/test_utils.py b/test/test_utils.py
index fed94a906..0896f4150 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -500,6 +500,11 @@ class TestUtil(unittest.TestCase):
         self.assertEqual(str_to_int('123,456'), 123456)
         self.assertEqual(str_to_int('123.456'), 123456)
         self.assertEqual(str_to_int(523), 523)
+        # Python 3 has no long
+        if sys.version_info < (3, 0):
+            eval('self.assertEqual(str_to_int(123456L), 123456)')
+        self.assertEqual(str_to_int('noninteger'), None)
+        self.assertEqual(str_to_int([]), None)
 
     def test_url_basename(self):
         self.assertEqual(url_basename('http://foo.de/'), '')
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 328f037a8..f6204692a 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -46,6 +46,7 @@ from .compat import (
     compat_html_entities,
     compat_html_entities_html5,
     compat_http_client,
+    compat_integer_types,
     compat_kwargs,
     compat_os_name,
     compat_parse_qs,
@@ -3519,10 +3520,11 @@ def str_or_none(v, default=None):
 
 def str_to_int(int_str):
     """ A more relaxed version of int_or_none """
-    if not isinstance(int_str, compat_str):
+    if isinstance(int_str, compat_integer_types):
         return int_str
-    int_str = re.sub(r'[,\.\+]', '', int_str)
-    return int(int_str)
+    elif isinstance(int_str, compat_str):
+        int_str = re.sub(r'[,\.\+]', '', int_str)
+        return int_or_none(int_str)
 
 
 def float_or_none(v, scale=1, invscale=1, default=None):