[utils] Add dict_get convenience method
This commit is contained in:
parent
b8b465af3e
commit
cbecc9b903
2 changed files with 23 additions and 0 deletions
|
@ -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)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue