[utils] Add try_call

This commit is contained in:
pukkandan 2022-03-31 13:19:16 +05:30
parent f189faf1ce
commit c4f60dd7cd
No known key found for this signature in database
GPG key ID: 7EEE9E1E817D0A39
5 changed files with 25 additions and 19 deletions

View file

@ -3096,15 +3096,19 @@ def dict_get(d, key_or_keys, default=None, skip_false_values=True):
return d.get(key_or_keys, default)
def try_get(src, getter, expected_type=None):
for get in variadic(getter):
def try_call(*funcs, expected_type=None, args=[], kwargs={}):
for f in funcs:
try:
v = get(src)
except (AttributeError, KeyError, TypeError, IndexError):
val = f(*args, **kwargs)
except (AttributeError, KeyError, TypeError, IndexError, ZeroDivisionError):
pass
else:
if expected_type is None or isinstance(v, expected_type):
return v
if expected_type is None or isinstance(val, expected_type):
return val
def try_get(src, getter, expected_type=None):
return try_call(*variadic(getter), args=(src,), expected_type=expected_type)
def filter_dict(dct, cndn=lambda _, v: v is not None):