def test_one_arg():
    expected = ("set_name", [
        "1",
    ])
    actual = parse_call_method_name('set_name("1")')

    assert actual == expected
Example #2
0
def test_var_with_curly_braces():
    expected = ("set_name", [
        "{}",
    ], {})
    actual = parse_call_method_name('set_name("{}")')

    assert actual == expected
def test_multiple_args():
    expected = ("set_name", [1, 2])
    actual = parse_call_method_name("set_name(1, 2)")

    assert actual == expected
def test_multiple_args():
    expected = ("set_name", [0, {"1": 2}])
    actual = parse_call_method_name('set_name(0, {"1": 2})')

    assert actual == expected
def test_single_dict_arg():
    expected = ("set_name", [{"1": 2, "3": 4}])
    actual = parse_call_method_name('set_name({"1": 2, "3": 4})')

    assert actual == expected
def test_single_int_arg():
    expected = ("set_name", [1])
    actual = parse_call_method_name("set_name(1)")

    assert actual == expected
Example #7
0
def test_special_method_with_parens():
    expected = ("$reset", [], {})
    actual = parse_call_method_name("$reset()")

    assert actual == expected
Example #8
0
def test_args_and_kwargs():
    expected = ("set_name", [8, 9], {"kwarg1": "wow"})
    actual = parse_call_method_name("set_name(8, 9, kwarg1='wow')")

    assert actual == expected
def handle(component_request: ComponentRequest, component: UnicornView,
           payload: Dict):
    call_method_name = payload.get("name", "")
    assert call_method_name, "Missing 'name' key for callMethod"

    (method_name, args, kwargs) = parse_call_method_name(call_method_name)
    return_data = Return(method_name, args, kwargs)
    setter_method = {}

    is_refresh_called = False
    is_reset_called = False
    validate_all_fields = False

    if "=" in call_method_name:
        try:
            setter_method = parse_kwarg(call_method_name,
                                        raise_if_unparseable=True)
        except InvalidKwarg:
            pass

    if setter_method:
        property_name = list(setter_method.keys())[0]
        property_value = setter_method[property_name]

        set_property_value(component, property_name, property_value)
        return_data = Return(property_name, [property_value])
    else:
        if method_name == "$refresh":
            # Handle the refresh special action
            component = UnicornView.create(
                component_id=component_request.id,
                component_name=component_request.name,
                request=component_request.request,
            )

            # Set component properties based on request data
            for (
                    property_name,
                    property_value,
            ) in component_request.data.items():
                set_property_from_data(component, property_name,
                                       property_value)
            component.hydrate()

            is_refresh_called = True
        elif method_name == "$reset":
            # Handle the reset special action
            component = UnicornView.create(
                component_id=component_request.id,
                component_name=component_request.name,
                request=component_request.request,
                use_cache=False,
            )

            #  Explicitly remove all errors and prevent validation from firing before render()
            component.errors = {}
            is_reset_called = True
        elif method_name == "$toggle":
            for property_name in args:
                property_value = _get_property_value(component, property_name)
                property_value = not property_value

                set_property_value(component, property_name, property_value)
        elif method_name == "$validate":
            # Handle the validate special action
            validate_all_fields = True
        else:
            component.calling(method_name, args)
            return_data.value = _call_method_name(component, method_name, args,
                                                  kwargs)
            component.called(method_name, args)

    return (
        component,
        is_refresh_called,
        is_reset_called,
        validate_all_fields,
        return_data,
    )