redis-shake工具
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

238 lines
3.8 KiB

import json
import os
j = json.load(open("table.json", "r"))
fp = open("table.go", "w")
fp.write("package commands\n\nvar containers = map[string]bool{\n")
for container in j["container"]:
fp.write(f'"{container.upper()}": true,\n')
fp.write("}\nvar redisCommands = map[string]redisCommand{\n")
for group, cmds in j["table"].items():
group = group.upper()
for cmd_name, specs in cmds.items():
print(group, cmd_name)
cmd_name = cmd_name.upper()
fp.write(f'"{cmd_name}": ' + "{\n")
fp.write(f'"{group}",\n')
fp.write("[]keySpec{\n")
for key_spec in specs:
fp.write("{\n")
if "index" in key_spec["begin_search"]:
fp.write('"index",\n')
fp.write(f'{key_spec["begin_search"]["index"]["pos"]},\n')
fp.write('"",\n')
fp.write('0,\n')
elif "keyword" in key_spec["begin_search"]:
fp.write('"keyword",\n')
fp.write('0,\n')
fp.write(f'"{key_spec["begin_search"]["keyword"]["keyword"]}",\n')
fp.write(f'{key_spec["begin_search"]["keyword"]["startfrom"]},\n')
else:
raise Exception(key_spec)
if "range" in key_spec["find_keys"]:
fp.write('"range",\n') # type
fp.write(f'{key_spec["find_keys"]["range"]["lastkey"]},\n') #
fp.write(f'{key_spec["find_keys"]["range"]["step"]},\n') #
fp.write(f'{key_spec["find_keys"]["range"]["limit"]},\n') #
fp.write('0,\n')
fp.write('0,\n')
fp.write('0,\n')
elif "keynum" in key_spec["find_keys"]:
fp.write('"keynum",\n') # type
fp.write('0,\n')
fp.write('0,\n')
fp.write('0,\n')
fp.write(f'{key_spec["find_keys"]["keynum"]["keynumidx"]},\n') #
fp.write(f'{key_spec["find_keys"]["keynum"]["firstkey"]},\n') #
fp.write(f'{key_spec["find_keys"]["keynum"]["step"]},\n') #
else:
raise Exception(key_spec)
fp.write('},\n')
fp.write('},\n')
fp.write('},\n')
fp.write("""
"BF.ADD": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.CARD": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.EXISTS": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.INFO": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.INSERT": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.LOADCHUNK": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.MADD": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.MEXISTS": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.RESERVE": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
"BF.SCANDUMP": {
"BLOOM FILTER",
[]keySpec{
{
"index",
1,
"",
0,
"range",
0,
1,
0,
0,
0,
0,
},
},
},
""")
fp.write('}\n')
fp.close()
os.system("go fmt table.go")