blob: 12396c38a6aed86c5b4fc654e662af5c59e1206a [file] [log] [blame]
from functools import wraps as _wraps
from sys import modules as _modules
from .ittapi_native_mock import ITTAPI_NATIVE_MODULE_NAME
class _IttapiNativeAttributeMock:
def __init__(self, name):
self._name = name
def __enter__(self):
return self.__reset_attribute_mock()
def __exit__(self, *args):
self.__reset_attribute_mock()
def __native_module_attribute(self):
return _modules[ITTAPI_NATIVE_MODULE_NAME].attributes().get(self._name)
def __reset_attribute_mock(self):
attr = self.__native_module_attribute()
attr.reset_mock()
attr.side_effect = None
return attr
class _IttapiNativePatch:
def __init__(self, attr_name):
self._attr_name = attr_name
def __call__(self, func):
def wrapper(*args, **kwargs):
with _IttapiNativeAttributeMock(self._attr_name) as attr_mock:
new_args = args + (attr_mock,)
return func(*new_args, **kwargs)
return _wraps(func)(wrapper)
def patch(attr_name):
return _IttapiNativePatch(attr_name)