def test_extra_keyword_args(self): def test(a, b, **kwargs): pass kwargs, xtra = getcallargs(test, a=5, b=6, c=7, d=8) self.assertTrue(kwargs == {'a': 5, 'b': 6, 'c': 7, 'd': 8}) self.assertTrue(xtra == [])
def test_default(self): def test(a, b, default=None): pass kwargs, xtra = getcallargs(test, a=5, b=6) self.assertTrue(kwargs == {'a': 5, 'b': 6, 'default': None}) self.assertTrue(xtra == [])
def test_no_args(self): def test(): pass kwargs, xtra = getcallargs(test) self.assertTrue(kwargs == {}) self.assertTrue(xtra == [])
def test_extra_positional_args(self): def test(a, b, *args): pass kwargs, xtra = getcallargs(test, 5, 6, 7, 8) self.assertTrue(kwargs == {'a': 5, 'b': 6}) self.assertTrue(xtra == [7, 8])
def dispatch(self, method_name, params): """ This method walks the attribute tree in the method and passes the parameters, either in positional or keyword form, into the appropriate method on the Handler class. Currently supports only positional or keyword arguments, not mixed. """ if method_name in dir(RequestHandler): # Pre-existing, not an implemented attribute return self.handler.result(self.faults.method_not_found()) method = self.handler method_list = dir(method) method_list.sort() attr_tree = method_name.split('.') try: for attr_name in attr_tree: method = self.check_method(attr_name, method) except AttributeError: return self.handler.result(self.faults.method_not_found()) if not callable(method): # Not callable, so not a method return self.handler.result(self.faults.method_not_found()) if method_name.startswith('_') or \ ('private' in dir(method) and method.private is True): # No, no. That's private. return self.handler.result(self.faults.method_not_found()) args = [] kwargs = {} if type(params) is types.DictType: # The parameters are keyword-based kwargs = params elif type(params) in (list, tuple): # The parameters are positional args = params else: # Bad argument formatting? return self.handler.result(self.faults.invalid_params()) # Validating call arguments try: final_kwargs, extra_args = getcallargs(method, *args, **kwargs) except TypeError: return self.handler.result(self.faults.invalid_params()) try: response = method(*extra_args, **final_kwargs) except Exception: self.traceback(method_name, params) return self.handler.result(self.faults.internal_error()) if 'async' in dir(method) and method. async: # Asynchronous response -- the method should have called # self.result(RESULT_VALUE) if response != None: # This should be deprecated to use self.result message = "Async results should use 'self.result()'" message += " Return result will be ignored." logging.warning(message) else: # Synchronous result -- we call result manually. return self.handler.result(response)
def test_positional_args(self): def test(a, b): pass kwargs, xtra = getcallargs(test, 5, 6) self.assertTrue(kwargs == {'a': 5, 'b': 6}) self.assertTrue(xtra == [])
def test_keyword_args(self): def test(a, b): pass kwargs, xtra = getcallargs(test, a=5, b=6) self.assertTrue(kwargs == {'a': 5, 'b': 6}) self.assertTrue(xtra == [])
def test_default(self): def test(a, b, default=None): pass kwargs, xtra = getcallargs(test, a=5, b=6) self.assertEqual(kwargs, {'a': 5, 'b': 6, 'default': None}) self.assertEqual(xtra, [])
def test_keyword_args(self): def test(a, b): pass kwargs, xtra = getcallargs(test, a=5, b=6) self.assertEqual(kwargs, {'a': 5, 'b': 6}) self.assertEqual(xtra, [])
def test_extra_positional_args(self): def test(a, b, *args): pass kwargs, xtra = getcallargs(test, 5, 6, 7, 8) self.assertEqual(kwargs, {'a': 5, 'b': 6}) self.assertEqual(xtra, [7, 8])
def test_positional_args(self): def test(a, b): pass kwargs, xtra = getcallargs(test, 5, 6) self.assertEqual(kwargs, {'a': 5, 'b': 6}) self.assertEqual(xtra, [])
def test_no_args(self): def test(): pass kwargs, xtra = getcallargs(test) self.assertEqual(kwargs, {}) self.assertEqual(xtra, [])
def test_method(self): class Foo(object): def test(myself, a, b): pass foo = Foo() kwargs, xtra = getcallargs(foo.test, 5, 6) self.assertEqual(kwargs, {'a': 5, 'b': 6}) self.assertEqual(xtra, [])
def test_extra_keyword_args(self): def test(a, b, **kwargs): pass kwargs, xtra = getcallargs(test, a=5, b=6, c=7, d=8) self.assertEqual(kwargs, {'a': 5, 'b': 6, 'c': 7, 'd': 8}) self.assertEqual(xtra, [])
def test_default(self): def test(a, b, default=None): pass kwargs, xtra = getcallargs(test, a=5, b=6) self.assertTrue(kwargs == {'a':5, 'b':6, 'default':None}) self.assertTrue(xtra == [])
def test_keyword_args(self): def test(a, b): pass kwargs, xtra = getcallargs(test, a=5, b=6) self.assertTrue(kwargs == {'a': 5, 'b':6}) self.assertTrue(xtra == [])
def test_positional_args(self): def test(a, b): pass kwargs, xtra = getcallargs(test, 5, 6) self.assertTrue(kwargs == {'a':5, 'b': 6}) self.assertTrue(xtra == [])