def test_kwargs_int(): expected = {"test": 2} actual = parse_kwarg("test=2") assert actual == expected assert isinstance(actual["test"], int) assert actual["test"] == 2
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)
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"
def test_kwargs_string(): expected = {"test": "1"} actual = parse_kwarg("test='1'") assert actual == expected assert isinstance(actual["test"], str) assert actual["test"] == "1"
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
def test_kwargs_invalid_internal_singlequote(): with pytest.raises(InvalidKwarg) as e: parse_kwarg("te'st=1") assert e.type == InvalidKwarg
def test_kwargs_invalid_internal_doublequote(): with pytest.raises(InvalidKwarg) as e: parse_kwarg('te"st=1') assert e.type == InvalidKwarg
def test_kwargs_invalid_no_equal_sign(): with pytest.raises(InvalidKwarg) as e: parse_kwarg("test") assert e.type == InvalidKwarg
def test_kwargs_invalid_startswith_singlequote(): with pytest.raises(InvalidKwarg) as e: parse_kwarg("'test'=2") assert e.type == InvalidKwarg
def test_kwargs_invalid_startswith_doublequote(): with pytest.raises(InvalidKwarg) as e: parse_kwarg('"test"=2') assert e.type == InvalidKwarg
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, )