From 1897b30d171d87bd56efe2987858db016f8a0e31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= <gp5761@partner.kit.edu> Date: Fri, 10 Jan 2025 09:17:15 +0100 Subject: [PATCH] Fix generation of api call signature --- net_api_generator/generator.py | 111 ++++++++++++++++++--------------- 1 file changed, 60 insertions(+), 51 deletions(-) diff --git a/net_api_generator/generator.py b/net_api_generator/generator.py index b6b9028..26616a3 100644 --- a/net_api_generator/generator.py +++ b/net_api_generator/generator.py @@ -286,58 +286,8 @@ def typescript(output_dir): return "export interface ParamList {\n\t old: string[],\n\t new: string[]\n}" def generate_api_function(api_function: ApiFunction) -> str: - def generate_api_call(api_function: ApiFunction) -> str: - api_code = "\t" + api_function.name + "(config: any, {$param}){\n$code\n\t}" - # generate parameters of api_function for signature - for parameter in api_function.parameters.values(): - replace_string = "" - if parameter.new is not None and parameter.old is not None: - # issue: param is old and new at the same time. Need to figure out how to - replace_string = parameter.name + "_new" - api_code = api_code.replace("$param", replace_string + ", $param") - replace_string = parameter.name + "_old" - api_code = api_code.replace("$param", replace_string + ", $param") - else: - if parameter.new is not None: - replace_string += parameter.name + "_new" - if parameter.old is not None: - replace_string += parameter.name + "_old" - api_code = api_code.replace("$param", replace_string+ ", $param") - api_code = api_code.replace('$param', '') - # generate param declaration string - param_declaration = ("\t\tconst params = {\n\t\t\t'new': {$new},\n\t\t\t'old': {$old}\n\t\t}") - param_old_string = "" - param_new_string = "" - for param_key, parameter in api_function.parameters.items(): - if parameter.new is not None: - param_new_string += parameter.name + ": " + parameter.name + "_new, " - if parameter.old is not None: - param_old_string += parameter.name + ": " + parameter.name + "_old, " - param_new_string = param_new_string[:-2] - param_old_string = param_old_string[:-2] - if '_old' not in param_old_string: - param_declaration = param_declaration.replace("$old", " ") - else: - param_declaration = param_declaration.replace("$old", "\n\t\t\t\t" + param_old_string + "\n\t\t\t") - if'_new' not in param_new_string: - param_declaration = param_declaration.replace("$new", " ") - else: - param_declaration = param_declaration.replace("$new", "\n\t\t\t\t" + param_new_string + "\n\t\t\t") - - # create axios request (at least when only post request is used - path = api_function.fq_name.replace('.','/') - axios_statement = "" - if api_function.is_data_manipulating: - axios_statement = "return Axios.$METHOD(`${NETVSConfig.NETDB_API_BASE_URL}/${NETVSConfig.NETDB_API_VERSION}/"+path+"`, params, (config || {}).netdb_axios_config)" - axios_statement = axios_statement.replace("$METHOD", 'post') - else: - pass - # axios_statement.replace("$METHOD", 'get') - api_code = api_code.replace("$code", param_declaration + "\n\t\t" + axios_statement) - return api_code - def generate_param_list(api_function: ApiFunction) -> str: - code_template = ("\t$METHOD_NAMEParamList(): ParamList {\n" + code_template = ("\t$METHOD_NAMEParamList (): ParamList {\n" "\t\treturn {\n" "\t\t\t'old': [$OLD],\n" "\t\t\t'new': [$NEW],\n" @@ -362,6 +312,65 @@ def typescript(output_dir): return code_template param_list_function = generate_param_list(api_function) + + def generate_api_call(api_function: ApiFunction) -> str: + code_template = ("\t$METHOD_NAME (config: any, $FUNCTION_ATTRIBUTE) {\n" + "\t\tconst params = {\n" + "\t\t\t'new': {\n" + "\t\t\t\t$NEW\n" + "\t\t\t},\n" + "\t\t\t'old':{\n" + "\t\t\t\t$OLD\n" + "\t\t\t}\n" + "\t\t}\n" + "\t\tAxios.$HTTP_METHOD(`${NETVSConfig.NETDB_API_BASE_URL}/${NETVSConfig.NETDB_API_VERSION}/$PATH`, params, (config || {}).netdb_axios_config)\n" + "\t}") + + code_template = code_template.replace('$METHOD_NAME', api_function.name) + + for index, parameter in enumerate(api_function.parameters.values()): + # function attributes + function_attribute_replace_string = "$PARAMETER_OLD_NAME: $PARAMETER_TYPE, $PARAMETER_NEW_NAME: $PARAMETER_TYPE" + if parameter.old is not None: + function_attribute_replace_string = function_attribute_replace_string.replace("$PARAMETER_OLD_NAME", parameter.name + "_old") + else: + function_attribute_replace_string = function_attribute_replace_string.replace("$PARAMETER_OLD_NAME: $PARAMETER_TYPE, ", "") + if parameter.new is not None: + function_attribute_replace_string = function_attribute_replace_string.replace("$PARAMETER_NEW_NAME", parameter.name + "_new") + else: + function_attribute_replace_string = function_attribute_replace_string.replace(", $PARAMETER_NEW_NAME: $PARAMETER_TYPE", "") + function_attribute_replace_string = function_attribute_replace_string.replace("$PARAMETER_TYPE", map_netdb_type_to_typescript_type(parameter.data_type)) + + if index < len(api_function.parameters) - 1: + code_template = code_template.replace("$FUNCTION_ATTRIBUTE", function_attribute_replace_string + ", $FUNCTION_ATTRIBUTE") + else: + code_template = code_template.replace("$FUNCTION_ATTRIBUTE", function_attribute_replace_string) + + # params definition + if parameter.old is not None: + parameter_old_replacement_str = parameter.name + ": " + parameter.name + "_old" + if index < len(api_function.parameters) - 1: + parameter_old_replacement_str += ", $OLD" + code_template = code_template.replace("$OLD", parameter_old_replacement_str) + if parameter.new is not None: + parameter_new_replacement_str = parameter.name + ": " + parameter.name + "_new" + if index < len(api_function.parameters) - 1: + parameter_new_replacement_str += ", $NEW" + code_template = code_template.replace("$NEW", parameter_new_replacement_str) + # cleanup: replace remaining $NEW and $OLD with empty strings + code_template = re.sub(r'\n\t\t\t\t\$OLD\n\t\t\t|\$OLD', "", code_template) + # code_template = code_template(r'\n\t\t\t\t$OLD\n\t\t\t|$OLD', "") + code_template = re.sub(r'\n\t\t\t\t\$NEW\n\t\t\t|\$NEW', "", code_template) + + if api_function.is_data_manipulating: + code_template = code_template.replace('$HTTP_METHOD', "post") + else: + code_template = code_template.replace('$HTTP_METHOD', "get") + + path_replacement_str = api_function.fq_name.replace(".", "/") + code_template = code_template.replace("$PATH", path_replacement_str) + print(code_template) + return code_template api_function_code = generate_api_call(api_function) return param_list_function + ",\n" + api_function_code -- GitLab