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)
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)
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
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
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)
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)