def test_one_arg(): expected = ("set_name", [ "1", ]) actual = parse_call_method_name('set_name("1")') assert actual == expected
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
def test_special_method_with_parens(): expected = ("$reset", [], {}) actual = parse_call_method_name("$reset()") assert actual == expected
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, )