OLD | NEW |
(Empty) | |
| 1 # Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import functools |
| 6 import logging |
| 7 |
| 8 |
| 9 def Memoize(f): |
| 10 """Decorator to cache return values of function.""" |
| 11 memoize_dict = {} |
| 12 @functools.wraps(f) |
| 13 def wrapper(*args, **kwargs): |
| 14 key = repr((args, kwargs)) |
| 15 if key not in memoize_dict: |
| 16 memoize_dict[key] = f(*args, **kwargs) |
| 17 return memoize_dict[key] |
| 18 return wrapper |
| 19 |
| 20 |
| 21 def NoRaiseException(default_return_value=None, exception_message=''): |
| 22 """Returns decorator that catches and logs uncaught Exceptions. |
| 23 |
| 24 Args: |
| 25 default_return_value: Value to return in the case of uncaught Exception. |
| 26 exception_message: Message for uncaught exceptions. |
| 27 """ |
| 28 def decorator(f): |
| 29 @functools.wraps(f) |
| 30 def wrapper(*args, **kwargs): |
| 31 try: |
| 32 return f(*args, **kwargs) |
| 33 except Exception: # pylint: disable=broad-except |
| 34 logging.exception(exception_message) |
| 35 return default_return_value |
| 36 return wrapper |
| 37 return decorator |
OLD | NEW |