def test_dynamic_adapter_instancemethod(self): def _adapter(self, arg1, arg2, arg3=None, *args, **kwargs): pass argspec = getfullargspec(_adapter) @wrapt.decorator(adapter=argspec) def _wrapper_1(wrapped, instance, args, kwargs): return wrapped(*args, **kwargs) class Class1(object): @_wrapper_1 def function(self): pass instance1 = Class1() self.assertEqual(getfullargspec(Class1.function), argspec) self.assertEqual(getfullargspec(instance1.function), argspec) args = '(self, arg1, arg2, arg3=None, *args, **kwargs)' @wrapt.decorator(adapter=args) def _wrapper_2(wrapped, instance, args, kwargs): return wrapped(*args, **kwargs) class Class2(object): @_wrapper_2 def function(self): pass instance2 = Class2() self.assertEqual(getfullargspec(Class2.function), argspec) self.assertEqual(getfullargspec(instance2.function), argspec)
def test_dynamic_adapter_function(self): def _adapter(arg1, arg2, arg3=None, *args, **kwargs): pass argspec = getfullargspec(_adapter) @wrapt.decorator(adapter=argspec) def _wrapper_1(wrapped, instance, args, kwargs): return wrapped(*args, **kwargs) @_wrapper_1 def _function_1(): pass self.assertEqual(getfullargspec(_function_1), argspec) args = '(arg1, arg2, arg3=None, *args, **kwargs)' @wrapt.decorator(adapter=args) def _wrapper_2(wrapped, instance, args, kwargs): return wrapped(*args, **kwargs) @_wrapper_2 def _function_2(): pass self.assertEqual(getfullargspec(_function_2), argspec)
def test_argspec(self): # Test preservation of function argument specification. It # actually needs to match that of the adapter function the # prototype of which was supplied via the dummy function. def _adapter(arg1, arg2, arg3=None, *args, **kwargs): pass function1a_argspec = getfullargspec(_adapter) function1d_argspec = getfullargspec(function1d) self.assertEqual(function1a_argspec, function1d_argspec) # Now bind the function to an instance. The argspec should # still match. bound_function1d = function1d.__get__(object(), object) bound_function1d_argspec = getfullargspec(bound_function1d) self.assertEqual(function1a_argspec, bound_function1d_argspec)
def test_adapter_factory(self): def factory(wrapped): argspec = getfullargspec(wrapped) argspec.args.insert(0, 'arg0') return argspec @wrapt.decorator(adapter=wrapt.adapter_factory(factory)) def _wrapper_1(wrapped, instance, args, kwargs): return wrapped(*args, **kwargs) @_wrapper_1 def _function_1(arg1, arg2): pass argspec = getfullargspec(_function_1) self.assertEqual(argspec.args, ['arg0', 'arg1', 'arg2'])
def test_class_argspec(self): # Test preservation of instance method argument specification. original_argspec = getfullargspec(Original.function) function_argspec = getfullargspec(Class.function) self.assertEqual(original_argspec, function_argspec)
def test_argspec(self): # Test preservation of function argument specification. function1o_argspec = getfullargspec(function1o) function1d_argspec = getfullargspec(function1d) self.assertEqual(function1o_argspec, function1d_argspec)
def test_instance_argspec(self): # Test preservation of instance method argument specification. original_argspec = getfullargspec(NewClass1o().function) function_argspec = getfullargspec(NewClass1d().function) self.assertEqual(original_argspec, function_argspec)
def factory(wrapped): argspec = getfullargspec(wrapped) argspec.args.insert(0, 'arg0') return argspec