Пример #1
0
def test_get_method_arguments():
    def test_func(input_str):
        return input_str

    expected = [
        "input_str",
    ]
    actual = get_method_arguments(test_func)
    assert actual == expected
Пример #2
0
def test_get_method_arguments_with_type_annotation():
    def test_func(input_str: str):
        return input_str

    expected = [
        "input_str",
    ]
    actual = get_method_arguments(test_func)
    assert actual == expected
Пример #3
0
def _call_method_name(component: UnicornView, method_name: str,
                      args: List[Any], kwargs: Dict[str, Any]) -> Any:
    """
    Calls the method name with parameters.

    Args:
        param component: Component to call method on.
        param method_name: Method name to call.
        param args: List of arguments for the method.
        param kwargs: Dictionary of kwargs for the method.
    """

    if method_name is not None and hasattr(component, method_name):
        func = getattr(component, method_name)

        if len(args) == 1 or len(kwargs.keys()) == 1:
            arguments = get_method_arguments(func)
            type_hints = get_type_hints(func)

            for argument in arguments:
                if argument in type_hints:
                    if issubclass(type_hints[argument], Model):
                        DbModel = type_hints[argument]
                        key = "pk"
                        value = None

                        if args:
                            value = args.pop()
                        elif kwargs:
                            (key, value) = list(kwargs.items())[0]
                            del kwargs[key]

                        model = DbModel.objects.get(**{key: value})

                        args.append(model)

        if args and kwargs:
            return func(*args, **kwargs)
        elif args:
            return func(*args, **kwargs)
        elif kwargs:
            return func(**kwargs)
        else:
            return func()