feat(proto):add proto 自动化生成工具

This commit is contained in:
yu_lang 2021-09-20 14:01:15 +08:00
parent 81f85009ab
commit 27fbb69034
4 changed files with 112 additions and 3 deletions

View File

@ -10,3 +10,8 @@ STRING_X:
LIST_X:
- l_set
- l_get
- l_add
- l_queue
- l_setbit
- l_getbit

22
protobuf/listx.proto Normal file
View File

@ -0,0 +1,22 @@
syntax = "proto3";
import "base.proto";
option go_package = "pkg/proto";
message LSetRequest {
BaseKey key = 1;
}
message LGetRequest {
BaseKey key = 1;
}
message LAddRequest {
BaseKey key = 1;
}
message LQueueRequest {
BaseKey key = 1;
}
message LSetbitRequest {
BaseKey key = 1;
}
message LGetbitRequest {
BaseKey key = 1;
}

View File

@ -19,6 +19,13 @@ message AddRequest {
int64 value = 2;
}
message RedceRequest {
message ReduceRequest {
BaseKey key = 1;
}
message SetbitRequest {
BaseKey key = 1;
}
message GetbitRequest {
BaseKey key = 1;
}

View File

@ -1 +1,76 @@
import os
from typing import Dict, List
from jinja2 import Template
import yaml
sysPath = os.getcwd()
tempPath = f"{sysPath}/pkg/structure/generate"
structurePath = f"{sysPath}/pkg/structure"
protobufPath = f"{sysPath}/protobuf"
def to_camel(val: str) -> str:
return "".join([k.capitalize() for k in val.split('_')])
def load_conf():
conf_path = f"{tempPath}/tem.yaml"
with open(conf_path, 'r', encoding='utf-8') as f:
cfg = f.read()
cfg = yaml.load(cfg)
cfg_camel = {}
for key, val in cfg.items():
key = to_camel(key).lower()
cfg_camel[key] = [to_camel(v) for v in val]
# print(cfg_camel)
return cfg, cfg_camel
# 生成文件,并写入
def mkdir(cfg_camel):
path = "protobuf"
path = path.strip()
# 判断路径是否存在
isExists = os.path.exists(path)
# 判断结果
if not isExists:
os.makedirs(path)
print(path + ' 创建成功')
else: # 如果目录存在则不创建,并提示目录已存在
# print(path + ' 目录已存在')
for key,value in cfg_camel.items():
# print(key)
proto_path = path + '/' + key + '.proto'
if not os.path.exists(proto_path): # 如果这个文件不存在
file = open(proto_path,'w')
file.write('syntax = "proto3";\nimport "base.proto";\noption go_package = "pkg/proto";\n')
for v in value:
file.write('\nmessage ' + v +'Request '+'{\n\tBaseKey key = 1;\n}')
file.close()
else: # 如果这个文件存在
with open(proto_path) as f:
line = f.readlines()
# print(line)
f.close()
for v in value:
function = v + 'Request'
flag = 0
for l in line:
if function in l:
flag=1
break
if flag == 0:
file = open(proto_path,'a')
file.write('\nmessage ' + v +'Request '+'{\n\tBaseKey key = 1;\n}')
file.close()
flag = 0
if __name__ == "__main__":
conf, cfg_camel = load_conf()
#
mkdir(cfg_camel)