コード例 #1
0
def test_invalid_arg_for_override_to_add_method():
    def dummy_validator():
        pass

    mm = MultiMethod(lambda *a: a)

    # See #1991
    with pytest.raises(ValueError):
        mm.add(dummy_validator, tuple(), override=sys.maxsize)
コード例 #2
0
ファイル: test_multimethod.py プロジェクト: Hypnus1803/sunpy
def test_invalid_arg_for_override_to_add_method():

    def dummy_validator():
        pass

    mm = MultiMethod(lambda *a: a)

    # See #1991
    with pytest.raises(ValueError):
        mm.add(dummy_validator, tuple(), override=sys.maxsize)
コード例 #3
0
ファイル: test_multimethod.py プロジェクト: Hypnus1803/sunpy
def test_call_cached():

    def sum_together(first, second):
        return first + second

    # Setup
    mm = MultiMethod(lambda *a: a)
    mm.add(sum_together, (int, int, ))
    assert mm(3, 4) == 7

    # The following call 'should' use the previously cached call
    # You'll only see the result of this in the code coverage test though
    assert mm(1, 2) == 3
コード例 #4
0
def test_call_cached():

    def sum_together(first, second):
        return first + second

    # Setup
    mm = MultiMethod(lambda *a: a)
    mm.add(sum_together, (int, int, ))
    assert mm(3, 4) == 7

    # The following call 'should' use the previously cached call
    # You'll only see the result of this in the code coverage test though
    assert mm(1, 2) == 3
コード例 #5
0
ファイル: attr.py プロジェクト: tyagi-prashant/sunpy
class AttrWalker(object):
    def __init__(self):
        self.applymm = MultiMethod(lambda *a, **kw: (a[1], ))
        self.createmm = MultiMethod(lambda *a, **kw: (a[1], ))

    def add_creator(self, *types):
        def _dec(fun):
            for type_ in types:
                self.createmm.add(fun, (type_, ))
            return fun

        return _dec

    def add_applier(self, *types):
        def _dec(fun):
            for type_ in types:
                self.applymm.add(fun, (type_, ))
            return fun

        return _dec

    def add_converter(self, *types):
        def _dec(fun):
            for type_ in types:
                self.applymm.add(self.cv_apply(fun), (type_, ))
                self.createmm.add(self.cv_create(fun), (type_, ))
            return fun

        return _dec

    def cv_apply(self, fun):
        def _fun(*args, **kwargs):
            args = list(args)
            args[1] = fun(args[1])
            return self.applymm(*args, **kwargs)

        return _fun

    def cv_create(self, fun):
        def _fun(*args, **kwargs):
            args = list(args)
            args[1] = fun(args[1])
            return self.createmm(*args, **kwargs)

        return _fun

    def create(self, *args, **kwargs):
        return self.createmm(self, *args, **kwargs)

    def apply(self, *args, **kwargs):
        return self.applymm(self, *args, **kwargs)

    def super_create(self, *args, **kwargs):
        return self.createmm.super(self, *args, **kwargs)

    def super_apply(self, *args, **kwargs):
        return self.applymm.super(self, *args, **kwargs)
コード例 #6
0
ファイル: attr.py プロジェクト: ericmjonas/sunpy
class AttrWalker(object):
    def __init__(self):
        self.applymm = MultiMethod(lambda *a, **kw: (a[1],))
        self.createmm = MultiMethod(lambda *a, **kw: (a[1],))

    def add_creator(self, *types):
        def _dec(fun):
            for type_ in types:
                self.createmm.add(fun, (type_,))
            return fun

        return _dec

    def add_applier(self, *types):
        def _dec(fun):
            for type_ in types:
                self.applymm.add(fun, (type_,))
            return fun

        return _dec

    def add_converter(self, *types):
        def _dec(fun):
            for type_ in types:
                self.applymm.add(self.cv_apply(fun), (type_,))
                self.createmm.add(self.cv_create(fun), (type_,))
            return fun

        return _dec

    def cv_apply(self, fun):
        def _fun(*args, **kwargs):
            args = list(args)
            args[1] = fun(args[1])
            return self.applymm(*args, **kwargs)

        return _fun

    def cv_create(self, fun):
        def _fun(*args, **kwargs):
            args = list(args)
            args[1] = fun(args[1])
            return self.createmm(*args, **kwargs)

        return _fun

    def create(self, *args, **kwargs):
        return self.createmm(self, *args, **kwargs)

    def apply(self, *args, **kwargs):
        return self.applymm(self, *args, **kwargs)

    def super_create(self, *args, **kwargs):
        return self.createmm.super(self, *args, **kwargs)

    def super_apply(self, *args, **kwargs):
        return self.applymm.super(self, *args, **kwargs)