Merge "Fixes expose of staticmethod"
This commit is contained in:
		@@ -17,6 +17,11 @@ class TestArgSpec(unittest.TestCase):
 | 
			
		||||
            def index(self, a, b, c=1, *args, **kwargs):
 | 
			
		||||
                return 'Hello, World!'
 | 
			
		||||
 | 
			
		||||
            @staticmethod
 | 
			
		||||
            @expose()
 | 
			
		||||
            def static_index(a, b, c=1, *args, **kwargs):
 | 
			
		||||
                return 'Hello, World!'
 | 
			
		||||
 | 
			
		||||
        return RootController()
 | 
			
		||||
 | 
			
		||||
    def test_no_decorator(self):
 | 
			
		||||
@@ -24,6 +29,10 @@ class TestArgSpec(unittest.TestCase):
 | 
			
		||||
        actual = util.getargspec(self.controller.index.__func__)
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
        expected = inspect.getargspec(self.controller.static_index)
 | 
			
		||||
        actual = util.getargspec(self.controller.static_index)
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
    def test_simple_decorator(self):
 | 
			
		||||
        def dec(f):
 | 
			
		||||
            return f
 | 
			
		||||
@@ -32,6 +41,10 @@ class TestArgSpec(unittest.TestCase):
 | 
			
		||||
        actual = util.getargspec(dec(self.controller.index.__func__))
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
        expected = inspect.getargspec(self.controller.static_index)
 | 
			
		||||
        actual = util.getargspec(dec(self.controller.static_index))
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
    def test_simple_wrapper(self):
 | 
			
		||||
        def dec(f):
 | 
			
		||||
            @functools.wraps(f)
 | 
			
		||||
@@ -43,6 +56,10 @@ class TestArgSpec(unittest.TestCase):
 | 
			
		||||
        actual = util.getargspec(dec(self.controller.index.__func__))
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
        expected = inspect.getargspec(self.controller.static_index)
 | 
			
		||||
        actual = util.getargspec(dec(self.controller.static_index))
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
    def test_multiple_decorators(self):
 | 
			
		||||
        def dec(f):
 | 
			
		||||
            @functools.wraps(f)
 | 
			
		||||
@@ -54,6 +71,11 @@ class TestArgSpec(unittest.TestCase):
 | 
			
		||||
        actual = util.getargspec(dec(dec(dec(self.controller.index.__func__))))
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
        expected = inspect.getargspec(self.controller.static_index)
 | 
			
		||||
        actual = util.getargspec(dec(dec(dec(
 | 
			
		||||
            self.controller.static_index))))
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
    def test_decorator_with_args(self):
 | 
			
		||||
        def dec(flag):
 | 
			
		||||
            def inner(f):
 | 
			
		||||
@@ -66,3 +88,8 @@ class TestArgSpec(unittest.TestCase):
 | 
			
		||||
        expected = inspect.getargspec(self.controller.index.__func__)
 | 
			
		||||
        actual = util.getargspec(dec(True)(self.controller.index.__func__))
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 | 
			
		||||
        expected = inspect.getargspec(self.controller.static_index)
 | 
			
		||||
        actual = util.getargspec(dec(True)(
 | 
			
		||||
            self.controller.static_index))
 | 
			
		||||
        assert expected == actual
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,12 @@ def getargspec(method):
 | 
			
		||||
 | 
			
		||||
    func_closure = six.get_function_closure(method)
 | 
			
		||||
 | 
			
		||||
    # NOTE(sileht): if the closure is None we cannot look deeper,
 | 
			
		||||
    # so return actual argspec, this occurs when the method
 | 
			
		||||
    # is static for example.
 | 
			
		||||
    if func_closure is None:
 | 
			
		||||
        return argspec
 | 
			
		||||
 | 
			
		||||
    closure = next(
 | 
			
		||||
        (
 | 
			
		||||
            c for c in func_closure if six.callable(c.cell_contents)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user