Source code for utool.tests.test_decor

# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function
import inspect
import utool


[docs]def func1(arg1, arg2): pass
[docs]def func2(arg1, arg2, arg4=5, *args, **kwargs): pass
[docs]def func3(arg1, arg2, arg4=5, **kwargs): pass
[docs]def func4(*args): pass
[docs]def func5(**kwargs): pass
[docs]def func6(*args, **kwargs): pass
[docs]def decor(func): @utool.accepts_scalar_input2([0, 4]) def testwrp(*args, **kwargs): return func(*args, **kwargs) testwrp = utool.preserve_sig(testwrp, func, force=True) return testwrp
[docs]class BoringTestClass(object): def __init__(self): pass @decor
[docs] def method1(self, *args, **kwargs): print('method1')
@decor
[docs] def method2(self, a, b, c=True, d='343', *args_, **kwargs_): print('method2') print('method2 a=%r' % (a,)) print('method2 b=%r' % (b,)) print('method2 c=%r' % (c,)) print('method2 d=%r' % (d,)) print('method2 args_=%r' % (args_,)) print('method2 kwargs_=%r' % (kwargs_,))
@decor
[docs] def method3(self): print('method3')
@decor
[docs] def getter_eggs(self, eggs): print('getter_eggs') print('eggs = %r' % (eggs,))
@decor
[docs] def getter_spam(self, spam_input_, *spamargs, **spamkwds): print('getter_spam') print('spam_input_ = %r' % (spam_input_,)) print('spamargs = %r' % (spamargs,)) print('spamkwds = %r' % (spamkwds,))
@decor
[docs] def setter(self, input_, values): print('setter') print('input_ = %r' % (input_,))
@decor
[docs] def setter_special(self, input_, values, **kwargs): print('setter_special') print('')
[docs]def test_decorator_module(): import utool as ut import decorator ut.rrrr() def testdecor(func): @ut.on_exception_report_input @ut.accepts_scalar_input2([0]) @ut.ignores_exc_tb def testwrp(*args, **kwargs): print('was wrapped') return func(*args, **kwargs) return testwrp preserving_testdecor = decorator.decorator(testdecor) def myfunction(self, listinput_, arg1, *args, **kwargs): " just a test function " return [x + 1 for x in listinput_] wrapper = testdecor(myfunction) orig_func = myfunction _wrp_preserve0 = preserving_testdecor(myfunction) _wrp_preserve1 = ut.preserve_sig(wrapper, orig_func, True) _wrp_preserve2 = ut.preserve_sig(wrapper, orig_func, False) print('___') print(ut.get_func_sourcecode(_wrp_preserve0)) print('___') print(ut.get_func_sourcecode(_wrp_preserve1)) print('___') print(ut.get_func_sourcecode(_wrp_preserve2)) print('___') print('---') print(ut.get_docstr(_wrp_preserve0)) print('---') print(ut.get_docstr(_wrp_preserve1)) print('---') print(ut.get_docstr(_wrp_preserve2)) print('---') print(ut.dict_str(_wrp_preserve2._utinfo))
[docs]def main(): r""" Example: >>> # ENABLE_DOCTEST >>> from utool.tests.test_decor import * # NOQA >>> result = main() >>> print(result) """ print('BEGINING TEST_DECOR') print('Testing normal func') for func in [func1, func2, func3, func4, func5, func6]: print_argspec(func) #utool.rrrr() #utool.util_decor.rrr() self = BoringTestClass() print('Testing class methods') for func in [self.method1, self.method2, self.getter_spam, self.getter_eggs]: print_argspec(func) if hasattr(func.im_func, '_utinfo'): print(func.im_func._utinfo['src']) print(func.im_func.func_code.co_name) print('<<') print('---') print_argspec(self.method2) self.method2('a', 'b') print('---') self.method2('a', 'b', c='c') print('---') self.method2('a', 'b', 'c') print('---') self.method2('a', 'b', d='d') print('---') self.method2('a', 'b', x='x') print('---') self.method2('a', 'b', 'c', 'd', 'e', 'f', 'x') print('---')
if __name__ == '__main__': """ CommandLine: python -m utool.tests.test_decor python -m utool.tests.test_decor --allexamples python -m utool.tests.test_decor --allexamples --noface --nosrc """ import multiprocessing multiprocessing.freeze_support() # for win32 import utool as ut # NOQA import sys if len(sys.argv) == 1: main() else: ut.doctest_funcs()