1# pylint: disable=missing-docstring 2# Copyright (c) 2014 The Chromium OS Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6def any_call(*args, **kwargs): 7 """An empty method to handle any call. 8 """ 9 pass 10 11 12def decorate(f): 13 """A noop decorator. 14 """ 15 return f 16 17 18def decorate_wrapper(f): 19 """Wrapper of the noop decorator. 20 21 Calling this method with any args will return the noop decorator function. 22 """ 23 return decorate 24 25 26class mock_class_type(type): 27 """Type class for the mock class to handle any class methods.""" 28 29 def __getattr__(self, attr): 30 # This is to support decorators like "@metrics.SecondsTimerDecorator" 31 # In this case, the call returns a function which returns a noop 32 # decorator function ("decorate"). 33 if 'Decorator' in attr: 34 return decorate_wrapper 35 else: 36 return mock_class_base 37 38 39class mock_class_base(object): 40 """Base class for a mock es class.""" 41 42 __metaclass__ = mock_class_type 43 44 def __init__(self, *args, **kwargs): 45 pass 46 47 48 def __getattribute__(self, name): 49 50 # TODO(dshi): Remove this method after all reference of timer.get_client 51 # is removed. 52 def get_client(*args, **kwargs): 53 return self 54 55 # get_client is to support call like "timer.get_client", which returns 56 # a class supporting Context when being called. 57 if name == 'get_client': 58 return get_client 59 elif name == 'indices': 60 return mock_class_base() 61 62 return any_call 63 64 65 def __enter__(self, *args, **kwargs): 66 """Method to support Context class.""" 67 return self 68 69 70 def __exit__(self, *args, **kwargs): 71 """Method to support Context class.""" 72 73 74 def __getitem__(self, key): 75 """Method to override __getitem__.""" 76 return self 77 78 79 def __setitem__(self, key, value): 80 """Method to override __setitem__.""" 81