Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re
- from subprocess import run, PIPE, DEVNULL
- from num2words import num2words
- from jinja2 import Environment, PackageLoader, select_autoescape
- env = Environment(
- loader=PackageLoader('__main__', 'templates'),
- autoescape=select_autoescape([])
- )
- def gen_gosrc(desc, templf):
- args = {
- "desc": desc,
- "args": re.findall('[A-Z][^A-Z]*', desc.split("R")[0]),
- "return": re.findall('[A-Z][^A-Z]*', desc.split("R")[1]),
- "enumerate": enumerate,
- "re": re,
- "len": len,
- "num2words": num2words,
- "types": {
- "I64": "int64",
- "I": "int",
- "B": "bool",
- "S": "string",
- "E": "error",
- "Y": "[]byte",
- "F": "float64",
- },
- "type_funcs": {
- "Y": "ByteSlice",
- "I64": "Int",
- },
- "tengo_type": {
- "I64": "int",
- "I": "int",
- "B": "bool",
- "S": "string",
- "E": "error",
- "Y": "bytes",
- "F": "float",
- }
- }
- for k in args["types"].keys():
- try:
- args["type_funcs"][k]
- except KeyError:
- args["type_funcs"][k] = args["types"][k].capitalize()
- for k in args["types"].keys():
- try:
- args["type_funcs"][k]
- except KeyError:
- args["type_funcs"][k] = args["types"][k].lower()
- gosrc = env.get_template(templf).render(**args)
- proc = run(
- ["gofmt"],
- input=gosrc.encode(),
- stdout=PIPE,
- )
- if proc.returncode == 0:
- print(proc.stdout.decode())
- else:
- print(gosrc)
- def gen(desc):
- if desc.startswith("Func"):
- desc = desc[4:]
- if desc[0] == "A":
- desc = desc[1:]
- gen_gosrc(desc, "func_wrapper.go.jinja2")
- gen_gosrc(desc, "func_wrapper_test.go.jinja2")
- gen("FuncASRYE")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement