Browse Source

[utils] Ensure `allow_types` for `variadic()` is a tuple

dirkf 2 years ago
parent
commit
f35b757c82
2 changed files with 3 additions and 0 deletions
  1. 1 0
      test/test_utils.py
  2. 2 0
      youtube_dl/utils.py

+ 1 - 0
test/test_utils.py

@@ -1563,6 +1563,7 @@ Line 1
         self.assertEqual(variadic(None), (None, ))
         self.assertEqual(variadic(None), (None, ))
         self.assertEqual(variadic('spam'), ('spam', ))
         self.assertEqual(variadic('spam'), ('spam', ))
         self.assertEqual(variadic('spam', allowed_types=dict), 'spam')
         self.assertEqual(variadic('spam', allowed_types=dict), 'spam')
+        self.assertEqual(variadic('spam', allowed_types=[dict]), 'spam')
 
 
     def test_traverse_obj(self):
     def test_traverse_obj(self):
         _TEST_DATA = {
         _TEST_DATA = {

+ 2 - 0
youtube_dl/utils.py

@@ -4213,6 +4213,8 @@ def multipart_encode(data, boundary=None):
 
 
 
 
 def variadic(x, allowed_types=(compat_str, bytes, dict)):
 def variadic(x, allowed_types=(compat_str, bytes, dict)):
+    if not isinstance(allowed_types, tuple) and isinstance(allowed_types, compat_collections_abc.Iterable):
+        allowed_types = tuple(allowed_types)
     return x if isinstance(x, compat_collections_abc.Iterable) and not isinstance(x, allowed_types) else (x,)
     return x if isinstance(x, compat_collections_abc.Iterable) and not isinstance(x, allowed_types) else (x,)