Ejemplo n.º 1
0
def test_kwargs_int():
    expected = {"test": 2}
    actual = parse_kwarg("test=2")

    assert actual == expected
    assert isinstance(actual["test"], int)
    assert actual["test"] == 2
Ejemplo n.º 2
0
def unicorn(parser, token):
    contents = token.split_contents()

    if len(contents) < 2:
        raise template.TemplateSyntaxError(
            "%r tag requires at least a single argument" %
            token.contents.split()[0])

    tag_name = contents[0]
    component_name = contents[1]

    if not (component_name[0] == component_name[-1]
            and component_name[0] in ('"', "'")):
        raise template.TemplateSyntaxError(
            "%r tag's argument should be in quotes" % tag_name)

    kwargs = {}

    for arg in contents[2:]:
        try:
            kwarg = parse_kwarg(arg)
            kwargs.update(kwarg)
        except InvalidKwarg:
            pass

    return UnicornNode(component_name[1:-1], kwargs)
Ejemplo n.º 3
0
def test_kwargs_skip_unparseable_value():
    expected = {"test": "some_context_variable"}
    actual = parse_kwarg("test=some_context_variable")

    assert actual == expected
    assert isinstance(actual["test"], str)
    assert actual["test"] == "some_context_variable"
Ejemplo n.º 4
0
def test_kwargs_string():
    expected = {"test": "1"}
    actual = parse_kwarg("test='1'")

    assert actual == expected
    assert isinstance(actual["test"], str)
    assert actual["test"] == "1"
Ejemplo n.º 5
0
def test_kwargs_raise_unparseable_value():
    with pytest.raises(ValueError) as e:
        parse_kwarg("test=some_context_variable", raise_if_unparseable=True)

    assert e.type == ValueError
Ejemplo n.º 6
0
def test_kwargs_invalid_internal_singlequote():
    with pytest.raises(InvalidKwarg) as e:
        parse_kwarg("te'st=1")

    assert e.type == InvalidKwarg
Ejemplo n.º 7
0
def test_kwargs_invalid_internal_doublequote():
    with pytest.raises(InvalidKwarg) as e:
        parse_kwarg('te"st=1')

    assert e.type == InvalidKwarg
Ejemplo n.º 8
0
def test_kwargs_invalid_no_equal_sign():
    with pytest.raises(InvalidKwarg) as e:
        parse_kwarg("test")

    assert e.type == InvalidKwarg
Ejemplo n.º 9
0
def test_kwargs_invalid_startswith_singlequote():
    with pytest.raises(InvalidKwarg) as e:
        parse_kwarg("'test'=2")

    assert e.type == InvalidKwarg
Ejemplo n.º 10
0
def test_kwargs_invalid_startswith_doublequote():
    with pytest.raises(InvalidKwarg) as e:
        parse_kwarg('"test"=2')

    assert e.type == InvalidKwarg
Ejemplo n.º 11
0
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,
    )