From dbff51a787be86df73319b0e19b3b7bd38c6ee9a Mon Sep 17 00:00:00 2001 From: doe1080 <98906116+doe1080@users.noreply.github.com> Date: Sun, 1 Jun 2025 18:33:01 +0900 Subject: [PATCH] [utils] `update_url_query`: Add `safe` parameter --- test/test_utils.py | 3 +++ yt_dlp/utils/_utils.py | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/test/test_utils.py b/test/test_utils.py index aedb565ec..71e8c1095 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -798,6 +798,9 @@ def test_update_url_query(self): self.assertEqual(parse_qs(update_url_query( 'http://example.com/path', {'test': '第二行тест'})), parse_qs('http://example.com/path?test=%E7%AC%AC%E4%BA%8C%E8%A1%8C%D1%82%D0%B5%D1%81%D1%82')) + self.assertEqual(update_url_query( + 'http://example.com/path', {'filter': 'type(image/png)'}, safe='()'), + 'http://example.com/path?filter=type(image%2Fpng)') def test_multipart_encode(self): self.assertEqual( diff --git a/yt_dlp/utils/_utils.py b/yt_dlp/utils/_utils.py index 20aa341ca..768d0c494 100644 --- a/yt_dlp/utils/_utils.py +++ b/yt_dlp/utils/_utils.py @@ -2574,10 +2574,11 @@ def urlencode_postdata(*args, **kargs): @partial_application -def update_url(url, *, query_update=None, **kwargs): +def update_url(url, *, query_update=None, safe='', **kwargs): """Replace URL components specified by kwargs @param url str or parse url tuple @param query_update update query + @param safe characters not percent-encoded in query @returns str """ if isinstance(url, str): @@ -2590,13 +2591,13 @@ def update_url(url, *, query_update=None, **kwargs): kwargs['query'] = urllib.parse.urlencode({ **urllib.parse.parse_qs(url.query), **query_update, - }, True) + }, True, safe) return urllib.parse.urlunparse(url._replace(**kwargs)) @partial_application -def update_url_query(url, query): - return update_url(url, query_update=query) +def update_url_query(url, query, *, safe=''): + return update_url(url, query_update=query, safe=safe) def _multipart_encode_impl(data, boundary):