aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/utils.py
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2023-02-17 16:51:34 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2023-02-17 17:52:23 +0530
commit45b2ee6f4fae139892a1a4335c269dcbb6671497 (patch)
tree3cd8e7e643dc0576dcc8e9e87079f015588a06ec /yt_dlp/utils.py
parenta5387729696a5b33f53f60ef06f48e45663b12dd (diff)
downloadhypervideo-pre-45b2ee6f4fae139892a1a4335c269dcbb6671497.tar.lz
hypervideo-pre-45b2ee6f4fae139892a1a4335c269dcbb6671497.tar.xz
hypervideo-pre-45b2ee6f4fae139892a1a4335c269dcbb6671497.zip
Update to ytdl-commit-2dd6c6e
[YouTube] Avoid crash if uploader_id extraction fails https://github.com/ytdl-org/youtube-dl/commit/2dd6c6edd8e0fc5e45865b8e6d865e35147de772 Except: * 295736c9cba714fb5de7d1c3dd31d86e50091cf8 [jsinterp] Improve parsing * 384f632e8a9b61e864a26678d85b2b39933b9bae [ITV] Overhaul ITV extractor * 33db85c571304bbd6863e3407ad8d08764c9e53b [feat]: Add support to external downloader aria2p
Diffstat (limited to 'yt_dlp/utils.py')
-rw-r--r--yt_dlp/utils.py28
1 files changed, 21 insertions, 7 deletions
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index 9eb9495a0..994239897 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -3149,14 +3149,28 @@ def urlencode_postdata(*args, **kargs):
return urllib.parse.urlencode(*args, **kargs).encode('ascii')
+def update_url(url, *, query_update=None, **kwargs):
+ """Replace URL components specified by kwargs
+ @param url str or parse url tuple
+ @param query_update update query
+ @returns str
+ """
+ if isinstance(url, str):
+ if not kwargs and not query_update:
+ return url
+ else:
+ url = urllib.parse.urlparse(url)
+ if query_update:
+ assert 'query' not in kwargs, 'query_update and query cannot be specified at the same time'
+ kwargs['query'] = urllib.parse.urlencode({
+ **urllib.parse.parse_qs(url.query),
+ **query_update
+ }, True)
+ return urllib.parse.urlunparse(url._replace(**kwargs))
+
+
def update_url_query(url, query):
- if not query:
- return url
- parsed_url = urllib.parse.urlparse(url)
- qs = urllib.parse.parse_qs(parsed_url.query)
- qs.update(query)
- return urllib.parse.urlunparse(parsed_url._replace(
- query=urllib.parse.urlencode(qs, True)))
+ return update_url(url, query_update=query)
def update_Request(req, url=None, data=None, headers=None, query=None):