Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
XianxinMao
Yt Dlp
提交
6606817a
Y
Yt Dlp
项目概览
XianxinMao
/
Yt Dlp
11 个月 前同步成功
通知
27
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
Yt Dlp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
6606817a
编写于
7月 11, 2021
作者:
P
pukkandan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[utils] Add `variadic`
上级
73d829c1
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
15 addition
and
27 deletion
+15
-27
yt_dlp/extractor/common.py
yt_dlp/extractor/common.py
+4
-10
yt_dlp/extractor/instagram.py
yt_dlp/extractor/instagram.py
+2
-3
yt_dlp/postprocessor/ffmpeg.py
yt_dlp/postprocessor/ffmpeg.py
+3
-8
yt_dlp/utils.py
yt_dlp/utils.py
+6
-6
未找到文件。
yt_dlp/extractor/common.py
浏览文件 @
6606817a
...
...
@@ -19,7 +19,6 @@
compat_etree_Element
,
compat_etree_fromstring
,
compat_getpass
,
compat_integer_types
,
compat_http_client
,
compat_os_name
,
compat_str
,
...
...
@@ -79,6 +78,7 @@
urljoin
,
url_basename
,
url_or_none
,
variadic
,
xpath_element
,
xpath_text
,
xpath_with_ns
,
...
...
@@ -628,14 +628,10 @@ def __can_accept_status_code(err, expected_status):
assert
isinstance
(
err
,
compat_urllib_error
.
HTTPError
)
if
expected_status
is
None
:
return
False
if
isinstance
(
expected_status
,
compat_integer_types
):
return
err
.
code
==
expected_status
elif
isinstance
(
expected_status
,
(
list
,
tuple
)):
return
err
.
code
in
expected_status
elif
callable
(
expected_status
):
return
expected_status
(
err
.
code
)
is
True
else
:
assert
False
return
err
.
code
in
variadic
(
expected_status
)
def
_request_webpage
(
self
,
url_or_request
,
video_id
,
note
=
None
,
errnote
=
None
,
fatal
=
True
,
data
=
None
,
headers
=
{},
query
=
{},
expected_status
=
None
):
"""
...
...
@@ -1207,8 +1203,7 @@ def _meta_regex(prop):
[^>]+?content=(["\'])(?P<content>.*?)\2'''
%
re
.
escape
(
prop
)
def
_og_search_property
(
self
,
prop
,
html
,
name
=
None
,
**
kargs
):
if
not
isinstance
(
prop
,
(
list
,
tuple
)):
prop
=
[
prop
]
prop
=
variadic
(
prop
)
if
name
is
None
:
name
=
'OpenGraph %s'
%
prop
[
0
]
og_regexes
=
[]
...
...
@@ -1238,8 +1233,7 @@ def _og_search_url(self, html, **kargs):
return
self
.
_og_search_property
(
'url'
,
html
,
**
kargs
)
def
_html_search_meta
(
self
,
name
,
html
,
display_name
=
None
,
fatal
=
False
,
**
kwargs
):
if
not
isinstance
(
name
,
(
list
,
tuple
)):
name
=
[
name
]
name
=
variadic
(
name
)
if
display_name
is
None
:
display_name
=
name
[
0
]
return
self
.
_html_search_regex
(
...
...
yt_dlp/extractor/instagram.py
浏览文件 @
6606817a
...
...
@@ -19,6 +19,7 @@
std_headers
,
try_get
,
url_or_none
,
variadic
,
)
...
...
@@ -188,9 +189,7 @@ def _real_extract(self, url):
uploader_id
=
media
.
get
(
'owner'
,
{}).
get
(
'username'
)
def
get_count
(
keys
,
kind
):
if
not
isinstance
(
keys
,
(
list
,
tuple
)):
keys
=
[
keys
]
for
key
in
keys
:
for
key
in
variadic
(
keys
):
count
=
int_or_none
(
try_get
(
media
,
(
lambda
x
:
x
[
'edge_media_%s'
%
key
][
'count'
],
lambda
x
:
x
[
'%ss'
%
kind
][
'count'
])))
...
...
yt_dlp/postprocessor/ffmpeg.py
浏览文件 @
6606817a
...
...
@@ -24,6 +24,7 @@
process_communicate_or_kill
,
replace_extension
,
traverse_obj
,
variadic
,
)
...
...
@@ -533,15 +534,9 @@ def run(self, info):
def
add
(
meta_list
,
info_list
=
None
):
if
not
meta_list
:
return
if
not
info_list
:
info_list
=
meta_list
if
not
isinstance
(
meta_list
,
(
list
,
tuple
)):
meta_list
=
(
meta_list
,)
if
not
isinstance
(
info_list
,
(
list
,
tuple
)):
info_list
=
(
info_list
,)
for
info_f
in
info_list
:
for
info_f
in
variadic
(
info_list
or
meta_list
):
if
isinstance
(
info
.
get
(
info_f
),
(
compat_str
,
compat_numeric_types
)):
for
meta_f
in
meta_list
:
for
meta_f
in
variadic
(
meta_list
)
:
metadata
[
meta_f
]
=
info
[
info_f
]
break
...
...
yt_dlp/utils.py
浏览文件 @
6606817a
...
...
@@ -4289,9 +4289,7 @@ def dict_get(d, key_or_keys, default=None, skip_false_values=True):
def
try_get
(
src
,
getter
,
expected_type
=
None
):
if
not
isinstance
(
getter
,
(
list
,
tuple
)):
getter
=
[
getter
]
for
get
in
getter
:
for
get
in
variadic
(
getter
):
try
:
v
=
get
(
src
)
except
(
AttributeError
,
KeyError
,
TypeError
,
IndexError
):
...
...
@@ -4964,11 +4962,9 @@ def cli_configuration_args(argdict, keys, default=[], use_compat=True):
assert
isinstance
(
keys
,
(
list
,
tuple
))
for
key_list
in
keys
:
if
isinstance
(
key_list
,
compat_str
):
key_list
=
(
key_list
,)
arg_list
=
list
(
filter
(
lambda
x
:
x
is
not
None
,
[
argdict
.
get
(
key
.
lower
())
for
key
in
key_list
]))
[
argdict
.
get
(
key
.
lower
())
for
key
in
variadic
(
key_list
)
]))
if
arg_list
:
return
[
arg
for
args
in
arg_list
for
arg
in
args
]
return
default
...
...
@@ -6265,3 +6261,7 @@ def traverse_dict(dictn, keys, casesense=True):
''' For backward compatibility. Do not use '''
return
traverse_obj
(
dictn
,
keys
,
casesense
=
casesense
,
is_user_input
=
True
,
traverse_string
=
True
)
def
variadic
(
x
,
allowed_types
=
str
):
return
x
if
isinstance
(
x
,
collections
.
Iterable
)
and
not
isinstance
(
x
,
allowed_types
)
else
(
x
,)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录