mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-11-21 17:51:51 +00:00
[utils] Introduce merge_dicts
This commit is contained in:
parent
0fe7783ece
commit
6cc622327f
3 changed files with 27 additions and 15 deletions
|
@ -42,6 +42,7 @@ from youtube_dl.utils import (
|
||||||
is_html,
|
is_html,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
limit_length,
|
limit_length,
|
||||||
|
merge_dicts,
|
||||||
mimetype2ext,
|
mimetype2ext,
|
||||||
month_by_name,
|
month_by_name,
|
||||||
multipart_encode,
|
multipart_encode,
|
||||||
|
@ -669,6 +670,17 @@ class TestUtil(unittest.TestCase):
|
||||||
self.assertEqual(dict_get(d, ('b', 'c', key, )), None)
|
self.assertEqual(dict_get(d, ('b', 'c', key, )), None)
|
||||||
self.assertEqual(dict_get(d, ('b', 'c', key, ), skip_false_values=False), false_value)
|
self.assertEqual(dict_get(d, ('b', 'c', key, ), skip_false_values=False), false_value)
|
||||||
|
|
||||||
|
def test_merge_dicts(self):
|
||||||
|
self.assertEqual(merge_dicts({'a': 1}, {'b': 2}), {'a': 1, 'b': 2})
|
||||||
|
self.assertEqual(merge_dicts({'a': 1}, {'a': 2}), {'a': 1})
|
||||||
|
self.assertEqual(merge_dicts({'a': 1}, {'a': None}), {'a': 1})
|
||||||
|
self.assertEqual(merge_dicts({'a': 1}, {'a': ''}), {'a': 1})
|
||||||
|
self.assertEqual(merge_dicts({'a': 1}, {}), {'a': 1})
|
||||||
|
self.assertEqual(merge_dicts({'a': None}, {'a': 1}), {'a': 1})
|
||||||
|
self.assertEqual(merge_dicts({'a': ''}, {'a': 1}), {'a': ''})
|
||||||
|
self.assertEqual(merge_dicts({'a': ''}, {'a': 'abc'}), {'a': 'abc'})
|
||||||
|
self.assertEqual(merge_dicts({'a': None}, {'a': ''}, {'a': 'abc'}), {'a': 'abc'})
|
||||||
|
|
||||||
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'), 'тест')
|
||||||
|
|
|
@ -23,6 +23,7 @@ from ..utils import (
|
||||||
is_html,
|
is_html,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
KNOWN_EXTENSIONS,
|
KNOWN_EXTENSIONS,
|
||||||
|
merge_dicts,
|
||||||
mimetype2ext,
|
mimetype2ext,
|
||||||
orderedSet,
|
orderedSet,
|
||||||
sanitized_Request,
|
sanitized_Request,
|
||||||
|
@ -3002,21 +3003,6 @@ class GenericIE(InfoExtractor):
|
||||||
return self.playlist_from_matches(
|
return self.playlist_from_matches(
|
||||||
sharevideos_urls, video_id, video_title)
|
sharevideos_urls, video_id, video_title)
|
||||||
|
|
||||||
def merge_dicts(dict1, dict2):
|
|
||||||
merged = {}
|
|
||||||
for k, v in dict1.items():
|
|
||||||
if v is not None:
|
|
||||||
merged[k] = v
|
|
||||||
for k, v in dict2.items():
|
|
||||||
if v is None:
|
|
||||||
continue
|
|
||||||
if (k not in merged or
|
|
||||||
(isinstance(v, compat_str) and v and
|
|
||||||
isinstance(merged[k], compat_str) and
|
|
||||||
not merged[k])):
|
|
||||||
merged[k] = v
|
|
||||||
return merged
|
|
||||||
|
|
||||||
# Look for HTML5 media
|
# Look for HTML5 media
|
||||||
entries = self._parse_html5_media_entries(url, webpage, video_id, m3u8_id='hls')
|
entries = self._parse_html5_media_entries(url, webpage, video_id, m3u8_id='hls')
|
||||||
if entries:
|
if entries:
|
||||||
|
|
|
@ -2225,6 +2225,20 @@ def try_get(src, getter, expected_type=None):
|
||||||
return v
|
return v
|
||||||
|
|
||||||
|
|
||||||
|
def merge_dicts(*dicts):
|
||||||
|
merged = {}
|
||||||
|
for a_dict in dicts:
|
||||||
|
for k, v in a_dict.items():
|
||||||
|
if v is None:
|
||||||
|
continue
|
||||||
|
if (k not in merged or
|
||||||
|
(isinstance(v, compat_str) and v and
|
||||||
|
isinstance(merged[k], compat_str) and
|
||||||
|
not merged[k])):
|
||||||
|
merged[k] = v
|
||||||
|
return merged
|
||||||
|
|
||||||
|
|
||||||
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