From d9a9da6dee8c7633be7057b7ff706e19710ee35c Mon Sep 17 00:00:00 2001 From: HuangJiaLuo <1820799930@qq.com> Date: Mon, 20 Sep 2021 14:00:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shell/gen_struct_interface.py | 109 ++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 shell/gen_struct_interface.py diff --git a/shell/gen_struct_interface.py b/shell/gen_struct_interface.py new file mode 100644 index 0000000..4e22bfd --- /dev/null +++ b/shell/gen_struct_interface.py @@ -0,0 +1,109 @@ +import os + + +def DealList(li: list): + # 对列表进行处理 + flag = 0 + InterName = [] + BlankNum = [] + SliceNum = [] + for i in range(len(li)): + if flag == 0: + SliceNum.append(i) + InterName.append(f"{li[i].lower().title()}Interface".replace("_", "").replace(":", "")) + flag = 1 + if li[i] == '': + BlankNum.append(i) + flag = 0 + Dict = {} + for i in range(len(InterName)-1): + Dict[InterName[i]] = li[SliceNum[i]+1:BlankNum[i]] + Dict[InterName[-1]] = li[BlankNum[-1]+2:] + return Dict + + +def SetInterface(): + # 对读取到的yaml进行处理 + Temp = [] + path = os.getcwd() + WirtePath = f"{path}/pkg/structure/interface.go" + ReadPath = f"{path}/pkg/structure/generate/tem.yaml" + with open(ReadPath, "r") as f: + title = f.read() + title = title.split("\n")[2:] + for i in title: + if ' - ' not in i: + Temp.append(i) + if ' - ' in i: + i = i.split("-")[1] + Temp.append(i) + + # 对列表进行处理,便于自动补全 + dic = DealList(Temp) + + # 通过传入的列表对interface.go进行自动补全 + Temp = [] + AppendList = [] + with open(WirtePath, "r") as f: + context = f.read() + context = context.split("\n") + flag = 0 + for i in context: + if "interface" in i: + flag = 1 # 开锁 + if "}" in i: + Temp.append(i) + AppendList.append(Temp) + Temp = [] + flag = 0 # 上锁 + if flag == 1: + Temp.append(i) + + # 拆分成功, 开始匹配 + Del = [] + res = context[0:20] + for i in AppendList[2:]: + x = i[0:2] + for key, values in dic.items(): + if key in i[0]: + Del.append(key) + for val in values: + x.append(f'\t{val.title().lstrip()}(*pr' + f'oto.{val.title().lstrip()}Request) ([]string, error)'.replace("_", "")) + x.append("\n}\n\n") + for j in x: + res.append(j) + for i in Del: + dic.pop(i) + # 添加新增的 + for key, values in dic.items(): + w = [] + w.append(f"type {key} interface" + "{") + w.append('\tKeyBaseInterface') + for val in values: + w.append(f'\t{val.title().lstrip()}(*pr' + f'oto.{val.title().lstrip()}Request) ([]string, error)'.replace("_", "")) + w.append("\n}\n\n") + for j in w: + res.append(j) + f = open(WirtePath, 'w') + judge = "" + for i in res: + if judge == i: + continue + judge = i + if "package" in i: + i = f"{i}\n" + if "import" in i: + i = f"{i}\n" + if i == '': + i = '\n' + if i == '}' or i == '\n{\n': + i = '\n}\n' + i = i.replace('\t', '\n\t') + f.write(i) + f.close() + + +if __name__ == "__main__": + SetInterface() \ No newline at end of file