Browse Source
[extractor/common] Add support multiple getters in try_get
master
Sergey M․
7 years ago
No known key found for this signature in database
GPG Key ID: 2C393E0F18A9236D
1 changed files with
10 additions and
7 deletions
-
youtube_dl/utils.py
|
|
@ -2103,13 +2103,16 @@ def dict_get(d, key_or_keys, default=None, skip_false_values=True): |
|
|
|
|
|
|
|
|
|
|
|
def try_get(src, getter, expected_type=None): |
|
|
|
try: |
|
|
|
v = getter(src) |
|
|
|
except (AttributeError, KeyError, TypeError, IndexError): |
|
|
|
pass |
|
|
|
else: |
|
|
|
if expected_type is None or isinstance(v, expected_type): |
|
|
|
return v |
|
|
|
if not isinstance(getter, (list, tuple)): |
|
|
|
getter = [getter] |
|
|
|
for get in getter: |
|
|
|
try: |
|
|
|
v = get(src) |
|
|
|
except (AttributeError, KeyError, TypeError, IndexError): |
|
|
|
pass |
|
|
|
else: |
|
|
|
if expected_type is None or isinstance(v, expected_type): |
|
|
|
return v |
|
|
|
|
|
|
|
|
|
|
|
def encode_compat_str(string, encoding=preferredencoding(), errors='strict'): |
|
|
|