コード例 #1
0
ファイル: funcmakers.py プロジェクト: wxq118691/funcy
def _wrap_higher_order(func, test):
    # NOTE: builtin housekeeping:
    #       map(None, ...) is much faster than map(identity, ...),
    #       also map(None, ...) works as zip() for multiple seqs
    builtin = PY2 and func in set([map, filter, imap, ifilter, ifilterfalse])

    # We are going to construct function using eval to preserve signature.
    # So we need to inspect it first.
    try:
        spec = getargspec(func)
    except TypeError:
        spec = ArgSpec(('f', ), 'seqs', None, None)
    # HACK: due to bug in python 3.4 - http://bugs.python.org/issue22203
    if not spec.args:
        spec = ArgSpec(('f', ), 'seqs', None, None)

    # Slicing with [1:-1] to get rid of parentheses
    spec_str = formatargspec(*spec)[1:-1]
    rest = ArgSpec(spec.args[1:], *spec[1:])
    rest_str = formatargspec(*rest)[1:-1]

    # We use nested lambda to make func and make_func locals which are faster
    func_str = "lambda __func, __make_func: " \
               "lambda {spec}: __func(__make_func({f}, {builtin}, {test}), {rest})" \
               .format(spec=spec_str, f=spec.args[0], rest=rest_str,
                       builtin=builtin, test=test)

    wrapper = eval(func_str, {}, {})(func, make_func)
    return wraps(func)(wrapper)
コード例 #2
0
 def _getargspec_init(method):
     try:
         return inspect.getargspec(method)
     except TypeError:
         if method is object.__init__:
             return ArgSpec(["self"], None, None, None)
         else:
             return ArgSpec(["self"], "args", "kwargs", None)
コード例 #3
0
ファイル: codegen.py プロジェクト: qhj000/flaskwebtest
 def _getargspec_init(method):
     try:
         return inspect.getargspec(method)
     except TypeError:
         if method is object.__init__:
             return ArgSpec(['self'], None, None, None)
         else:
             return ArgSpec(['self'], 'args', 'kwargs', None)
コード例 #4
0
    def setUpClass(cls):
        cls.aspec = ArgSpec(args=["hello", "world"],
                            varargs=None,
                            keywords=None,
                            defaults=False)

        cls.bspec = ArgSpec(args=[],
                            varargs="names",
                            keywords="kwargs",
                            defaults=None)
コード例 #5
0
ファイル: test_module.py プロジェクト: jgleissner/salt-2
    def setUpClass(cls):
        cls.aspec = ArgSpec(args=['hello', 'world'],
                            varargs=None,
                            keywords=None,
                            defaults=False)

        cls.bspec = ArgSpec(args=[],
                            varargs='names',
                            keywords='kwargs',
                            defaults=None)
コード例 #6
0
def getconfigargspec(obj):
	if isinstance(obj, ThreadedSegment):
		args = ['interval']
		defaults = [getattr(obj, 'interval', 1)]
		if obj.update_first:
			args.append('update_first')
			defaults.append(True)
		methods = ['render', 'set_state']
		if isinstance(obj, KwThreadedSegment):
			methods += ['key', 'render_one']

		for method in methods:
			if hasattr(obj, method):
				# Note: on <python-2.6 it may return simple tuple, not 
				# ArgSpec instance.
				argspec = getargspec(getattr(obj, method))
				for i, arg in zip(count(1), reversed(argspec.args)):
					if (arg == 'self' or
							(arg == 'segment_info' and
								getattr(obj, 'powerline_requires_segment_info', None)) or
							(arg == 'pl') or
							(method.startswith('render') and (1 if argspec.args[0] == 'self' else 0) + i == len(argspec.args)) or
							arg in args):
						continue
					if argspec.defaults and len(argspec.defaults) >= i:
						default = argspec.defaults[-i]
						defaults.append(default)
						args.append(arg)
					else:
						args.insert(0, arg)
		argspec = ArgSpec(args=args, varargs=None, keywords=None, defaults=tuple(defaults))
	else:
		if hasattr(obj, 'powerline_origin'):
			obj = obj.powerline_origin
		else:
			obj = obj

		argspec = getargspec(obj)
		args = []
		defaults = []
		for i, arg in zip(count(1), reversed(argspec.args)):
			if ((arg == 'segment_info' and getattr(obj, 'powerline_requires_segment_info', None)) or
				arg == 'pl'):
				continue
			if argspec.defaults and len(argspec.defaults) >= i:
				default = argspec.defaults[-i]
				defaults.append(default)
				args.append(arg)
			else:
				args.insert(0, arg)
		argspec = ArgSpec(args=args, varargs=argspec.varargs, keywords=argspec.keywords, defaults=tuple(defaults))

	return argspec
コード例 #7
0
class ModuleStateTest(TestCase):
    '''
    Tests module state (salt/states/module.py)
    '''

    aspec = ArgSpec(args=['hello', 'world'],
                    varargs=None,
                    keywords=None,
                    defaults=False)
    bspec = ArgSpec(args=[], varargs='names', keywords='kwargs', defaults=None)

    def test_module_run_module_not_available(self):
        '''
        Tests the return of module.run state when the module function
        name isn't available
        '''
        with patch.dict(module.__salt__, {}):
            cmd = 'hello.world'
            ret = module.run(cmd)
            comment = 'Module function {0} is not available'.format(cmd)
            self.assertEqual(ret['comment'], comment)
            self.assertFalse(ret['result'])

    def test_module_run_test_true(self):
        '''
        Tests the return of module.run state when test=True is passed in
        '''
        with patch.dict(module.__opts__, {'test': True}):
            ret = module.run(CMD)
            comment = 'Module function {0} is set to execute'.format(CMD)
            self.assertEqual(ret['comment'], comment)

    @patch('salt.utils.args.get_function_argspec',
           MagicMock(return_value=aspec))
    def test_module_run_missing_arg(self):
        '''
        Tests the return of module.run state when arguments are missing
        '''
        ret = module.run(CMD)
        comment = 'The following arguments are missing: world hello'
        self.assertEqual(ret['comment'], comment)

    @patch('salt.utils.args.get_function_argspec',
           MagicMock(return_value=bspec))
    def test_module_run_hidden_varargs(self):
        '''
        Tests the return of module.run state when hidden varargs are used with
        wrong type.
        '''
        ret = module.run(CMD, m_names='anyname')
        comment = "'names' must be a list."
        self.assertEqual(ret['comment'], comment)
コード例 #8
0
ファイル: test_helpers.py プロジェクト: rohit19081995/uqtools
    def test_defaults(self):
        ''' positional args with defaults '''
        def f2(x, y=1):
            return x, y

        f2_a = fix_args(f2, x=0)
        as_a = ArgSpec(['y'], None, None, (1, ))
        assert as_a == getargspec(f2_a)
        assert f2_a() == (0, 1)
        assert f2_a(2) == (0, 2)
        f2_b = fix_args(f2, y=1)
        as_b = ArgSpec(['x'], None, None, None)
        assert as_b == getargspec(f2_b)
        assert f2_b(0) == (0, 1)
コード例 #9
0
def test_signature_justify(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'value'],
                  varargs=None,
                  keywords=None,
                  defaults=('L', ))
    assert getargspec(ThermalPrinter.justify) == sig
コード例 #10
0
def test_signature___init__(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'port', 'baudrate'],
                  varargs=None,
                  keywords='kwargs',
                  defaults=('/dev/ttyAMA0', 19200))
    assert getargspec(ThermalPrinter.__init__) == sig
コード例 #11
0
def test_signature_codepage(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'codepage'],
                  varargs=None,
                  keywords=None,
                  defaults=(CodePage.CP437, ))
    assert getargspec(ThermalPrinter.codepage) == sig
コード例 #12
0
def test_signature_chinese_format(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'fmt'],
                  varargs=None,
                  keywords=None,
                  defaults=(Chinese.GBK, ))
    assert getargspec(ThermalPrinter.chinese_format) == sig
コード例 #13
0
 def argspec():
     argspec = sage_getargspec(func)
     args = ((argspec.args if not argspec.args is None else []) +
             list(self.options))
     defaults = (argspec.defaults or ()) + tuple(self.options.values())
     # Note: argspec.defaults is not always a tuple for some reason
     return ArgSpec(args, argspec.varargs, argspec.keywords, defaults)
コード例 #14
0
def test_signature_left_margin(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'margin'],
                  varargs=None,
                  keywords=None,
                  defaults=(0, ))
    assert getargspec(ThermalPrinter.left_margin) == sig
コード例 #15
0
def test_signature_line_spacing(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'spacing'],
                  varargs=None,
                  keywords=None,
                  defaults=(30, ))
    assert getargspec(ThermalPrinter.line_spacing) == sig
コード例 #16
0
def test_signature_bold(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'state'],
                  varargs=None,
                  keywords=None,
                  defaults=(False, ))
    assert getargspec(ThermalPrinter.bold) == sig
コード例 #17
0
def test_signature_charset(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'charset'],
                  varargs=None,
                  keywords=None,
                  defaults=(CharSet.USA, ))
    assert getargspec(ThermalPrinter.charset) == sig
コード例 #18
0
def test_signature_barcode_position(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'position'],
                  varargs=None,
                  keywords=None,
                  defaults=(BarCodePosition.HIDDEN, ))
    assert getargspec(ThermalPrinter.barcode_position) == sig
コード例 #19
0
def test_signature_barcode_width(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'width'],
                  varargs=None,
                  keywords=None,
                  defaults=(3, ))
    assert getargspec(ThermalPrinter.barcode_width) == sig
コード例 #20
0
def test_signature_underline(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'weight'],
                  varargs=None,
                  keywords=None,
                  defaults=(0, ))
    assert getargspec(ThermalPrinter.underline) == sig
コード例 #21
0
def test_signature_to_bytes(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'data'],
                  varargs=None,
                  keywords=None,
                  defaults=None)
    assert getargspec(ThermalPrinter.to_bytes) == sig
コード例 #22
0
def test_signature_sleep(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'seconds'],
                  varargs=None,
                  keywords=None,
                  defaults=(1, ))
    assert getargspec(ThermalPrinter.sleep) == sig
コード例 #23
0
def test_signature_out(methods):
    methods.remove(extract_stack(None, 2)[1][2].replace('test_signature_', ''))
    sig = ArgSpec(args=['self', 'data', 'line_feed'],
                  varargs=None,
                  keywords='kwargs',
                  defaults=(True, ))
    assert getargspec(ThermalPrinter.out) == sig
コード例 #24
0
def _drop_self(spec):
    """
    Take an argspec and return a new one without the 'self'.
    """
    args, varargs, varkw, defaults = spec
    if args[0:1] == ['self']:
        args = args[1:]
    return ArgSpec(args, varargs, varkw, defaults)
コード例 #25
0
ファイル: decorators.py プロジェクト: thalespaiva/sagelib
 def argspec():
     from sageinspect import sage_getargspec
     argspec = sage_getargspec(func)
     args = (argspec.args
             if not argspec.args is None else []) + self.options.keys()
     defaults = tuple(argspec.defaults if not argspec.defaults is None else ()) \
                     + tuple(self.options.values())
     #Note: argspec.defaults is not always a tuple for some reason
     return ArgSpec(args, argspec.varargs, argspec.keywords, defaults)
コード例 #26
0
ファイル: test_helpers.py プロジェクト: rohit19081995/uqtools
    def test_mixed(self):
        def f7(x, y=1, *args, **kwargs):
            return x, y, args, kwargs

        f7_a = fix_args(f7, x=0)
        as_a = ArgSpec(['y'], 'args', 'kwargs', (1, ))
        assert as_a == getargspec(f7_a)
        assert f7_a() == (0, 1, (), {})
        assert f7_a(1, 2, z=3) == (0, 1, (2, ), {'z': 3})
コード例 #27
0
    def patched_inspect_getargspec(func: Callable[[Any], ArgSpec]) -> ArgSpec:
        spec = getfullargspec(func)

        return ArgSpec(
            args=spec.args,
            varargs=spec.varargs or "",
            keywords=spec.varkw or "",
            defaults=spec.defaults or (),
        )
コード例 #28
0
ファイル: test_helpers.py プロジェクト: rohit19081995/uqtools
    def test_decorator(self):
        class C9:
            @fix_args(y=1)
            def f(self, x, y):
                return x, y

        c9 = C9()
        as_a = ArgSpec(['self', 'x'], None, None, None)
        assert as_a == getargspec(c9.f)
        assert c9.f(0) == (0, 1)
コード例 #29
0
ファイル: test_helpers.py プロジェクト: rohit19081995/uqtools
    def test_posargs(self):
        ''' positional args only '''
        def f1(x, y):
            return x, y

        f1_a = fix_args(f1, x=0)
        as_a = ArgSpec(['y'], None, None, None)
        assert as_a == getargspec(f1_a)
        assert f1_a(1) == (0, 1)
        f1_b = fix_args(f1, y=1)
        as_b = ArgSpec(['x'], None, None, None)
        assert as_b == getargspec(f1_b)
        assert f1_b(0) == (0, 1)
        f1_c = fix_args(f1, x=0, y=1)
        as_c = ArgSpec([], None, None, None)
        assert as_c == getargspec(f1_c)
        assert f1_c() == (0, 1)
        with raises(ValueError):
            fix_args(f1, z=2)
コード例 #30
0
ファイル: inspect.py プロジェクト: mickdupreez/temp
def getconfigargspec(obj):
    if hasattr(obj, 'powerline_origin'):
        obj = obj.powerline_origin
    else:
        obj = obj

    args = []
    defaults = []

    if isinstance(obj, Segment):
        additional_args = obj.additional_args()
        argspecobjs = obj.argspecobjs()
        get_omitted_args = obj.omitted_args
    else:
        additional_args = ()
        argspecobjs = ((None, obj),)
        get_omitted_args = lambda *args: ()

    for arg in additional_args:
        args.append(arg[0])
        if len(arg) > 1:
            defaults.append(arg[1])

    requires_segment_info = hasattr(obj, 'powerline_requires_segment_info')
    requires_filesystem_watcher = hasattr(obj, 'powerline_requires_filesystem_watcher')

    for name, method in argspecobjs:
        argspec = getargspec(method)
        omitted_args = get_omitted_args(name, method)
        largs = len(argspec.args)
        for i, arg in enumerate(reversed(argspec.args)):
            if (
                largs - (i + 1) in omitted_args
                or arg in omitted_args
                or arg == 'pl'
                or arg == 'self'
                or (arg == 'create_watcher' and requires_filesystem_watcher)
                or (arg == 'segment_info' and requires_segment_info)
            ):
                continue
            if argspec.defaults and len(argspec.defaults) > i:
                if arg in args:
                    idx = args.index(arg)
                    if len(args) - idx > len(defaults):
                        args.pop(idx)
                    else:
                        continue
                default = argspec.defaults[-(i + 1)]
                defaults.append(default)
                args.append(arg)
            else:
                if arg not in args:
                    args.insert(0, arg)

    return ArgSpec(args=args, varargs=None, keywords=None, defaults=tuple(defaults))