* update for autoglm-v * Update run_autoglm.py --------- Co-authored-by: hanyullai <hanyullai@outlook.com>
118 lines
4.3 KiB
Python
118 lines
4.3 KiB
Python
def generate_func(json_data):
|
|
# 收集所有类名和它们的函数
|
|
class_funcs = {}
|
|
no_class_funcs = []
|
|
|
|
for item in json_data:
|
|
if item["type"] == "function":
|
|
func = item["function"]
|
|
func_parts = func["name"].split(".")
|
|
|
|
if len(func_parts) == 2:
|
|
class_name, func_name = func_parts
|
|
if class_name not in class_funcs:
|
|
class_funcs[class_name] = []
|
|
class_funcs[class_name].append(item)
|
|
else:
|
|
no_class_funcs.append(item)
|
|
|
|
code = ""
|
|
|
|
# 生成有类的函数
|
|
for class_name, funcs in class_funcs.items():
|
|
code += f"class {class_name}:\n"
|
|
for item in funcs:
|
|
func = item["function"]
|
|
func_name = func["name"].split(".")[-1]
|
|
description = func["description"]
|
|
params = func["parameters"]["properties"]
|
|
required = func["parameters"].get("required", [])
|
|
|
|
# 构建参数列表
|
|
param_list = ["cls"]
|
|
# 首先添加必需参数
|
|
for param_name in required:
|
|
param_list.append(f"{param_name}")
|
|
# 然后添加可选参数
|
|
for param_name in params:
|
|
if param_name not in required:
|
|
param_list.append(f"{param_name}") # 可选参数默认值设为None
|
|
|
|
# 构建函数定义
|
|
func_def = f" def {func_name}({', '.join(param_list)}):\n"
|
|
|
|
# 构建文档字符串
|
|
docstring = f' """\n {description}\n\n Args:\n'
|
|
if len(param_list) == 1: # 只有cls参数
|
|
docstring += " None\n"
|
|
else:
|
|
# 首先记录必需参数
|
|
for param_name in required:
|
|
param_type = params[param_name]["type"]
|
|
param_desc = params[param_name].get("description", "")
|
|
docstring += f" {param_name} ({param_type}): {param_desc}\n"
|
|
# 然后记录可选参数
|
|
for param_name in params:
|
|
if param_name not in required:
|
|
param_type = params[param_name]["type"]
|
|
param_desc = params[param_name].get("description", "")
|
|
docstring += f" {param_name} ({param_type}, optional): {param_desc}\n"
|
|
|
|
docstring += ' """\n'
|
|
|
|
code += func_def + docstring + "\n"
|
|
|
|
code += "\n"
|
|
|
|
# 生成没有类的函数
|
|
for item in no_class_funcs:
|
|
func = item["function"]
|
|
func_name = func["name"]
|
|
description = func["description"]
|
|
params = func["parameters"]["properties"]
|
|
required = func["parameters"].get("required", [])
|
|
|
|
# 构建参数列表
|
|
param_list = []
|
|
# 首先添加必需参数
|
|
for param_name in required:
|
|
param_list.append(f"{param_name}")
|
|
# 然后添加可选参数
|
|
for param_name in params:
|
|
if param_name not in required:
|
|
param_list.append(f"{param_name}")
|
|
|
|
# 构建函数定义
|
|
func_def = f"def {func_name}({', '.join(param_list)}):\n"
|
|
|
|
# 构建文档字符串
|
|
docstring = f' """\n {description}\n\n Args:\n'
|
|
if not param_list:
|
|
docstring += " None\n"
|
|
else:
|
|
# 首先记录必需参数
|
|
for param_name in required:
|
|
param_type = params[param_name]["type"]
|
|
param_desc = params[param_name].get("description", "")
|
|
docstring += f" {param_name} ({param_type}): {param_desc}\n"
|
|
# 然后记录可选参数
|
|
for param_name in params:
|
|
if param_name not in required:
|
|
param_type = params[param_name]["type"]
|
|
param_desc = params[param_name].get("description", "")
|
|
docstring += f" {param_name} ({param_type}, optional): {param_desc}\n"
|
|
|
|
docstring += ' """\n'
|
|
|
|
code += func_def + docstring + "\n"
|
|
|
|
return code.strip()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import json
|
|
|
|
with open("libreoffice_calc.json", "r") as f:
|
|
json_data = json.load(f)
|
|
print(generate_func(json_data))
|