def test_double_partial(self): expected_test_arg1 = 123 expected_test_arg2 = 456 def fn_has_kwargs(test_arg1, test_arg2, **x): if test_arg1 != expected_test_arg1 or test_arg2 != expected_test_arg2: return ValueError('partial does not work correctly') return x wrapped_fn = functools.partial(fn_has_kwargs, test_arg2=456) double_wrapped_fn = functools.partial(wrapped_fn, test_arg1=123) self.assertTrue(function_utils.has_kwargs(double_wrapped_fn)) some_kwargs = dict(x=1, y=2, z=3) self.assertEqual(double_wrapped_fn(**some_kwargs), some_kwargs) def fn_has_no_kwargs(x, test_arg1, test_arg2): if test_arg1 != expected_test_arg1 or test_arg2 != expected_test_arg2: return ValueError('partial does not work correctly') return x wrapped_fn = functools.partial(fn_has_no_kwargs, test_arg2=456) double_wrapped_fn = functools.partial(wrapped_fn, test_arg1=123) self.assertFalse(function_utils.has_kwargs(double_wrapped_fn)) some_arg = 1 self.assertEqual(double_wrapped_fn(some_arg), some_arg) # pylint: disable=no-value-for-parameter
def test_simple_function(self): fn_has_kwargs = lambda **x: x self.assertTrue(function_utils.has_kwargs(fn_has_kwargs)) fn_has_no_kwargs = lambda x: x self.assertFalse(function_utils.has_kwargs(fn_has_no_kwargs))
def test_simple_function(self): fn_has_kwargs = lambda **x: x self.assertTrue(function_utils.has_kwargs(fn_has_kwargs)) fn_has_no_kwargs = lambda x: x self.assertFalse(function_utils.has_kwargs(fn_has_no_kwargs))
def test_double_partial(self): expected_test_arg1 = 123 expected_test_arg2 = 456 def fn_has_kwargs(test_arg1, test_arg2, **x): if test_arg1 != expected_test_arg1 or test_arg2 != expected_test_arg2: return ValueError('partial does not work correctly') return x wrapped_fn = functools.partial(fn_has_kwargs, test_arg2=456) double_wrapped_fn = functools.partial(wrapped_fn, test_arg1=123) self.assertTrue(function_utils.has_kwargs(double_wrapped_fn)) some_kwargs = dict(x=1, y=2, z=3) self.assertEqual(double_wrapped_fn(**some_kwargs), some_kwargs) def fn_has_no_kwargs(x, test_arg1, test_arg2): if test_arg1 != expected_test_arg1 or test_arg2 != expected_test_arg2: return ValueError('partial does not work correctly') return x wrapped_fn = functools.partial(fn_has_no_kwargs, test_arg2=456) double_wrapped_fn = functools.partial(wrapped_fn, test_arg1=123) self.assertFalse(function_utils.has_kwargs(double_wrapped_fn)) some_arg = 1 self.assertEqual(double_wrapped_fn(some_arg), some_arg)
def test_bound_method(self): class FooHasKwargs(object): def fn(self, **x): del x self.assertTrue(function_utils.has_kwargs(FooHasKwargs().fn)) class FooHasNoKwargs(object): def fn(self, x): del x self.assertFalse(function_utils.has_kwargs(FooHasNoKwargs().fn))
def test_callable(self): class FooHasKwargs(object): def __call__(self, **x): del x self.assertTrue(function_utils.has_kwargs(FooHasKwargs())) class FooHasNoKwargs(object): def __call__(self, x): del x self.assertFalse(function_utils.has_kwargs(FooHasNoKwargs()))
def test_bounded_method(self): class FooHasKwargs(object): def fn(self, **x): del x self.assertTrue(function_utils.has_kwargs(FooHasKwargs().fn)) class FooHasNoKwargs(object): def fn(self, x): del x self.assertFalse(function_utils.has_kwargs(FooHasNoKwargs().fn))
def test_callable(self): class FooHasKwargs(object): def __call__(self, **x): del x self.assertTrue(function_utils.has_kwargs(FooHasKwargs())) class FooHasNoKwargs(object): def __call__(self, x): del x self.assertFalse(function_utils.has_kwargs(FooHasNoKwargs()))
def test_partial_function(self): expected_test_arg = 123 def fn_has_kwargs(test_arg, **x): if test_arg != expected_test_arg: return ValueError('partial fn does not work correctly') return x wrapped_fn = functools.partial(fn_has_kwargs, test_arg=123) self.assertTrue(function_utils.has_kwargs(wrapped_fn)) def fn_has_no_kwargs(x, test_arg): if test_arg != expected_test_arg: return ValueError('partial fn does not work correctly') return x wrapped_fn = functools.partial(fn_has_no_kwargs, test_arg=123) self.assertFalse(function_utils.has_kwargs(wrapped_fn))
def test_partial_function(self): expected_test_arg = 123 def fn_has_kwargs(test_arg, **x): if test_arg != expected_test_arg: return ValueError('partial fn does not work correctly') return x wrapped_fn = functools.partial(fn_has_kwargs, test_arg=123) self.assertTrue(function_utils.has_kwargs(wrapped_fn)) some_kwargs = dict(x=1, y=2, z=3) self.assertEqual(wrapped_fn(**some_kwargs), some_kwargs) def fn_has_no_kwargs(x, test_arg): if test_arg != expected_test_arg: return ValueError('partial fn does not work correctly') return x wrapped_fn = functools.partial(fn_has_no_kwargs, test_arg=123) self.assertFalse(function_utils.has_kwargs(wrapped_fn)) some_arg = 1 self.assertEqual(wrapped_fn(some_arg), some_arg)
def test_double_partial(self): expected_test_arg1 = 123 expected_test_arg2 = 456 def fn_has_kwargs(test_arg1, test_arg2, **x): if test_arg1 != expected_test_arg1 or test_arg2 != expected_test_arg2: return ValueError('partial does not work correctly') return x wrapped_fn = functools.partial(fn_has_kwargs, test_arg2=456) double_wrapped_fn = functools.partial(wrapped_fn, test_arg1=123) self.assertTrue(function_utils.has_kwargs(double_wrapped_fn)) def fn_has_no_kwargs(x, test_arg1, test_arg2): if test_arg1 != expected_test_arg1 or test_arg2 != expected_test_arg2: return ValueError('partial does not work correctly') return x wrapped_fn = functools.partial(fn_has_no_kwargs, test_arg2=456) double_wrapped_fn = functools.partial(wrapped_fn, test_arg1=123) self.assertFalse(function_utils.has_kwargs(double_wrapped_fn))
def test_raises_type_error(self): with self.assertRaisesRegex(TypeError, 'should be a callable'): function_utils.has_kwargs('not a function')
def test_raises_type_error(self): with self.assertRaisesRegexp( TypeError, 'fn should be a function-like object'): function_utils.has_kwargs('not a function')