зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1384396 - Add a @depends_all utility function; r=nalexander
Often you only want to evaluate a function if all its dependencies are true. Expressing this in a "when" can be difficult. So let's add a convenience decorator for it. The existing code for @depends_if() was refactored to take an evaluation function as its first argument. This prevents some duplicate code and turns @depends_if() and @depends_all() into one-liners. MozReview-Commit-ID: Jbugvf0lioM --HG-- extra : rebase_source : 177741b80ac4fbfb547d6b36a6f5777fe514d91a extra : source : 0c2bc12f4ebe44428385745266d2fd158e0c3382
This commit is contained in:
Родитель
8cfbdba9c5
Коммит
f6426ce5ad
|
@ -404,10 +404,11 @@ always = dependable(True)
|
|||
never = dependable(False)
|
||||
|
||||
|
||||
# Like @depends, but the decorated function is only called if one of the
|
||||
# arguments it would be called with has a positive value (bool(value) is True)
|
||||
# Create a decorator that will only execute the body of a function
|
||||
# if the passed function returns True when passed all positional
|
||||
# arguments.
|
||||
@template
|
||||
def depends_if(*args, **kwargs):
|
||||
def depends_tmpl(eval_args_fn, *args, **kwargs):
|
||||
if kwargs:
|
||||
assert len(kwargs) == 1
|
||||
when = kwargs['when']
|
||||
|
@ -416,11 +417,26 @@ def depends_if(*args, **kwargs):
|
|||
def decorator(func):
|
||||
@depends(*args, when=when)
|
||||
def wrapper(*args):
|
||||
if any(arg for arg in args):
|
||||
if eval_args_fn(args):
|
||||
return func(*args)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
# Like @depends, but the decorated function is only called if one of the
|
||||
# arguments it would be called with has a positive value (bool(value) is True)
|
||||
@template
|
||||
def depends_if(*args, **kwargs):
|
||||
return depends_tmpl(any, *args, **kwargs)
|
||||
|
||||
|
||||
# Like @depends, but the decorated function is only called if all of the
|
||||
# arguments it would be called with have a positive value.
|
||||
@template
|
||||
def depends_all(*args, **kwargs):
|
||||
return depends_tmpl(all, *args, **kwargs)
|
||||
|
||||
|
||||
# Hacks related to old-configure
|
||||
# ==============================
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче