mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 00:25:15 +00:00 
			
		
		
		
	[utils] Add dict_get convenience method
This commit is contained in:
		@@ -22,6 +22,7 @@ from youtube_dl.utils import (
 | 
				
			|||||||
    DateRange,
 | 
					    DateRange,
 | 
				
			||||||
    detect_exe_version,
 | 
					    detect_exe_version,
 | 
				
			||||||
    determine_ext,
 | 
					    determine_ext,
 | 
				
			||||||
 | 
					    dict_get,
 | 
				
			||||||
    encode_compat_str,
 | 
					    encode_compat_str,
 | 
				
			||||||
    encodeFilename,
 | 
					    encodeFilename,
 | 
				
			||||||
    escape_rfc3986,
 | 
					    escape_rfc3986,
 | 
				
			||||||
@@ -450,6 +451,19 @@ class TestUtil(unittest.TestCase):
 | 
				
			|||||||
        data = urlencode_postdata({'username': 'foo@bar.com', 'password': '1234'})
 | 
					        data = urlencode_postdata({'username': 'foo@bar.com', 'password': '1234'})
 | 
				
			||||||
        self.assertTrue(isinstance(data, bytes))
 | 
					        self.assertTrue(isinstance(data, bytes))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_dict_get(self):
 | 
				
			||||||
 | 
					        d = {
 | 
				
			||||||
 | 
					            'a': 42,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        self.assertEqual(dict_get(d, 'a'), 42)
 | 
				
			||||||
 | 
					        self.assertEqual(dict_get(d, 'b'), None)
 | 
				
			||||||
 | 
					        self.assertEqual(dict_get(d, 'b', 42), 42)
 | 
				
			||||||
 | 
					        self.assertEqual(dict_get(d, ('a', )), 42)
 | 
				
			||||||
 | 
					        self.assertEqual(dict_get(d, ('b', 'a', )), 42)
 | 
				
			||||||
 | 
					        self.assertEqual(dict_get(d, ('b', 'c', 'a', 'd', )), 42)
 | 
				
			||||||
 | 
					        self.assertEqual(dict_get(d, ('b', 'c', )), None)
 | 
				
			||||||
 | 
					        self.assertEqual(dict_get(d, ('b', 'c', ), 42), 42)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_encode_compat_str(self):
 | 
					    def test_encode_compat_str(self):
 | 
				
			||||||
        self.assertEqual(encode_compat_str(b'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82', 'utf-8'), 'тест')
 | 
					        self.assertEqual(encode_compat_str(b'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82', 'utf-8'), 'тест')
 | 
				
			||||||
        self.assertEqual(encode_compat_str('тест', 'utf-8'), 'тест')
 | 
					        self.assertEqual(encode_compat_str('тест', 'utf-8'), 'тест')
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1717,6 +1717,15 @@ def encode_dict(d, encoding='utf-8'):
 | 
				
			|||||||
    return dict((encode(k), encode(v)) for k, v in d.items())
 | 
					    return dict((encode(k), encode(v)) for k, v in d.items())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def dict_get(d, key_or_keys, default=None):
 | 
				
			||||||
 | 
					    if isinstance(key_or_keys, (list, tuple)):
 | 
				
			||||||
 | 
					        for key in key_or_keys:
 | 
				
			||||||
 | 
					            if d.get(key):
 | 
				
			||||||
 | 
					                return d[key]
 | 
				
			||||||
 | 
					        return default
 | 
				
			||||||
 | 
					    return d.get(key_or_keys, default)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def encode_compat_str(string, encoding=preferredencoding(), errors='strict'):
 | 
					def encode_compat_str(string, encoding=preferredencoding(), errors='strict'):
 | 
				
			||||||
    return string if isinstance(string, compat_str) else compat_str(string, encoding, errors)
 | 
					    return string if isinstance(string, compat_str) else compat_str(string, encoding, errors)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user