def test_from_function(self): function = lambda: None signature = Signature.from_function(function) self.assert_equal(signature.positional_arguments, []) self.assert_equal(signature.keyword_arguments, []) self.assert_equal(signature.annotations, {}) self.assert_equal(signature.arbitary_positional_arguments, None) self.assert_equal(signature.arbitary_keyword_arguments, None) self.assert_equal(signature.defaults, {}) self.assert_equal(signature.documentation, None) function = lambda a, b: None signature = Signature.from_function(function) self.assert_equal(signature.positional_arguments, ["a", "b"]) function = lambda a=1, b=2: None signature = Signature.from_function(function) self.assert_equal(signature.positional_arguments, ["a", "b"]) self.assert_equal(signature.keyword_arguments, []) self.assert_equal(signature.defaults, {"a": 1, "b": 2}) def function(): """Test""" signature = Signature.from_function(function) self.assert_equal(signature.documentation, "Test")
def decorate(function): signature = Signature.from_function(function) if not signature.annotations: signature.annotations = dict(zip(signature.names, positionals)) command = type( function.__name__, (cls, ), { "__module__": function.__module__, "__doc__": function.__doc__ } )() command.main = function cls._populate_from_signature(command, signature) return command
def test_names(self): def function(a, b, c=None, *args, **kwargs): pass self.assert_equal(Signature.from_function(function).names, ["a", "b", "c", "args", "kwargs"])