From 66ab0814c4baa2dc79c2dd5287bc0ad61a37c5b9 Mon Sep 17 00:00:00 2001 From: dirkf Date: Sun, 3 Sep 2023 23:15:19 +0100 Subject: [PATCH] [utils] Revert bbd3e7e, updating docstring, test instead --- test/test_utils.py | 46 ++++++++++++++++++++++----------------------- youtube_dl/utils.py | 3 ++- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/test/test_utils.py b/test/test_utils.py index fdae1f744..102420fcb 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -62,13 +62,14 @@ from youtube_dl.utils import ( OnDemandPagedList, orderedSet, parse_age_limit, + parse_bitrate, parse_duration, parse_filesize, parse_codecs, parse_count, parse_iso8601, parse_resolution, - parse_bitrate, + parse_qs, pkcs1pad, prepend_extension, read_batch_urls, @@ -125,7 +126,6 @@ from youtube_dl.compat import ( compat_setenv, compat_str, compat_urlparse, - compat_parse_qs, ) @@ -683,38 +683,36 @@ class TestUtil(unittest.TestCase): self.assertTrue(isinstance(data, bytes)) def test_update_url_query(self): - def query_dict(url): - return compat_parse_qs(compat_urlparse.urlparse(url).query) - self.assertEqual(query_dict(update_url_query( + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'quality': ['HD'], 'format': ['mp4']})), - query_dict('http://example.com/path?quality=HD&format=mp4')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path?quality=HD&format=mp4')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'system': ['LINUX', 'WINDOWS']})), - query_dict('http://example.com/path?system=LINUX&system=WINDOWS')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path?system=LINUX&system=WINDOWS')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'fields': 'id,formats,subtitles'})), - query_dict('http://example.com/path?fields=id,formats,subtitles')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path?fields=id,formats,subtitles')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'fields': ('id,formats,subtitles', 'thumbnails')})), - query_dict('http://example.com/path?fields=id,formats,subtitles&fields=thumbnails')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path?fields=id,formats,subtitles&fields=thumbnails')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path?manifest=f4m', {'manifest': []})), - query_dict('http://example.com/path')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path?system=LINUX&system=WINDOWS', {'system': 'LINUX'})), - query_dict('http://example.com/path?system=LINUX')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path?system=LINUX')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'fields': b'id,formats,subtitles'})), - query_dict('http://example.com/path?fields=id,formats,subtitles')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path?fields=id,formats,subtitles')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'width': 1080, 'height': 720})), - query_dict('http://example.com/path?width=1080&height=720')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path?width=1080&height=720')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'bitrate': 5020.43})), - query_dict('http://example.com/path?bitrate=5020.43')) - self.assertEqual(query_dict(update_url_query( + parse_qs('http://example.com/path?bitrate=5020.43')) + self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'test': '第二行тест'})), - query_dict('http://example.com/path?test=%E7%AC%AC%E4%BA%8C%E8%A1%8C%D1%82%D0%B5%D1%81%D1%82')) + parse_qs('http://example.com/path?test=%E7%AC%AC%E4%BA%8C%E8%A1%8C%D1%82%D0%B5%D1%81%D1%82')) def test_multipart_encode(self): self.assertEqual( diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index fdf41b025..443d2609c 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -4248,6 +4248,7 @@ def update_url(url, **kwargs): url: compat_str or parsed URL tuple if query_update is in kwargs, update query with its value instead of replacing (overrides any `query`) + NB: query_update expects parse_qs() format: [key: value_list, ...] returns: compat_str """ if not kwargs: @@ -4257,7 +4258,7 @@ def update_url(url, **kwargs): query = kwargs.pop('query_update', None) if query: qs = compat_parse_qs(url.query) - qs.update((k, [v]) for k, v in query.items()) + qs.update(query) kwargs['query'] = compat_urllib_parse_urlencode(qs, True) kwargs = compat_kwargs(kwargs) return compat_urllib_parse.urlunparse(url._replace(**kwargs))