| Index: build/android/pylib/utils/decorators.py
|
| diff --git a/build/android/pylib/utils/decorators.py b/build/android/pylib/utils/decorators.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8eec1d1e58e6da46517e7e64c05f917609ceac96
|
| --- /dev/null
|
| +++ b/build/android/pylib/utils/decorators.py
|
| @@ -0,0 +1,37 @@
|
| +# Copyright 2017 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import functools
|
| +import logging
|
| +
|
| +
|
| +def Memoize(f):
|
| + """Decorator to cache return values of function."""
|
| + memoize_dict = {}
|
| + @functools.wraps(f)
|
| + def wrapper(*args, **kwargs):
|
| + key = repr((args, kwargs))
|
| + if key not in memoize_dict:
|
| + memoize_dict[key] = f(*args, **kwargs)
|
| + return memoize_dict[key]
|
| + return wrapper
|
| +
|
| +
|
| +def NoRaiseException(default_return_value=None, exception_message=''):
|
| + """Returns decorator that catches and logs uncaught Exceptions.
|
| +
|
| + Args:
|
| + default_return_value: Value to return in the case of uncaught Exception.
|
| + exception_message: Message for uncaught exceptions.
|
| + """
|
| + def decorator(f):
|
| + @functools.wraps(f)
|
| + def wrapper(*args, **kwargs):
|
| + try:
|
| + return f(*args, **kwargs)
|
| + except Exception: # pylint: disable=broad-except
|
| + logging.exception(exception_message)
|
| + return default_return_value
|
| + return wrapper
|
| + return decorator
|
|
|