def __init__(self, m, name, sinfo): m.stmt("/* structure") cm = Module() m.stmt(cm) cm.stmt(name) self.cm_map = {sinfo["jsonname"]: cm} m.stmt("*/")
def json2swagger( *, files, dst: str, output_format: str, name: str, detector, emitter, annotate, emit, with_minimap: bool, without_example: bool ): from prestring import Module from dictknife import DictWalker if annotate is not None: annotate = loading.loadfile(annotate) else: annotate = {} ns = "dictknife.swaggerknife.json2swagger" detector = import_symbol(detector, ns=ns)() emitter = import_symbol(emitter, ns=ns)(annotate) info = None for src in files: data = loading.loadfile(src) info = detector.detect(data, name, info=info) if emit == "info": loading.dumpfile(info, filename=dst) else: m = Module(indent=" ") m.stmt(name) emitter.emit(info, m) if with_minimap: print("# minimap ###") print("# *", end="") print("\n# ".join(str(m).split("\n"))) if without_example: for _, d in DictWalker(["example"]).walk(emitter.doc): d.pop("example") loading.dumpfile(emitter.doc, filename=dst, format=output_format)
def main(): import argparse parser = argparse.ArgumentParser() parser.add_argument("--name", type=str, default="top") parser.add_argument("--annotations", type=argparse.FileType('r'), default=None) parser.add_argument("--show-minimap", action="store_true") parser.add_argument("--logging", default="INFO", choices=sorted(logging._nameToLevel.keys())) parser.add_argument("--emit", default="schema", choices=["schema", "info"]) parser.add_argument("--dst", type=argparse.FileType('w'), default=None) parser.add_argument("src", type=argparse.FileType('r'), default=sys.stdin, nargs="?") args = parser.parse_args() logging.basicConfig(level=args.logging) annotations = {} if args.annotations: annotations = loading.load(args.annotations) detector = Detector() emitter = Emitter(annotations) loading.setup() data = loading.load(args.src) info = detector.detect(data, args.name) if args.emit == "info": loading.dumpfile(info, filename=args.dst) else: m = Module(indent=" ") m.stmt(args.name) emitter.emit(info, m) if args.show_minimap: print("# minimap ###") print("# *", end="") print("\n# ".join(str(m).split("\n"))) loading.dumpfile(emitter.doc, filename=args.dst)
from prestring import Module sm = Module() with sm.scope(): sm.stmt("- foo") sm.stmt("- bar") sm.stmt("- boo") m = Module() m.stmt("// start") with m.scope(): m.stmt("itemize") m.submodule(sm, newline=False) m.stmt("// end") print(m)
parser.add_argument("--logging", default="INFO", choices=list(logging._nameToLevel.keys())) parser.add_argument("--emit", default="schema", choices=["schema", "info"]) parser.add_argument("--dst", type=argparse.FileType('w'), default=None) parser.add_argument("src", type=argparse.FileType('r')) args = parser.parse_args() logging.basicConfig(level=args.logging) annotations = {} if args.annotations: annotations = loading.load(args.annotations) detector = Detector() emitter = Emitter(annotations) loading.setup() data = loading.load(args.src) info = detector.detect(data, args.name) if args.emit == "info": loading.dumpfile(info, filename=args.dst) else: m = Module(indent=" ") m.stmt(args.name) emitter.emit(info, m) if args.show_minimap: print("# minimap ###") print("# *", end="") print("\n# ".join(str(m).split("\n"))) loading.dumpfile(emitter.doc, filename=args.dst)
from prestring import Module m = Module() m.stmt("// start") with m.scope(): m.stmt("itemize") sm = m.submodule("") m.stmt("// end") with sm.scope(): sm.stmt("- foo") sm.stmt("- bar") sm.stmt("- boo") print(m)
def emit_internal(m: Module) -> None: with m.scope(): m.stmt("- foo") m.stmt("- bar") m.stmt("- boo")
from prestring import Module m = Module() m.stmt("// start") sm = m.submodule("") m.stmt("// end") with sm.scope(): sm.stmt("- foo") sm.stmt("- bar") sm.stmt("- boo") print(m)
def view_docstring(self, fulldata, d, rename_dict=rename_dict): if "parameters" not in d: return None parameters = defaultdict(list) for p in d["parameters"]: p = self.resolve_ref(fulldata, p) parameters[p["in"]].append(p) # "query", "header", "path", "formData" or "body" m = Module() body = parameters.pop("body", None) for name, vs in parameters.items(): pyramid_name = rename_dict.get(name) or name m.stmt(pyramid_name) m.stmt("") with m.scope(): for v in vs: name = v.get("name", "") description = v.get("description", "-") if description: description = " {}".format(description) extra = v.copy() extra.pop("in", None) extra.pop("name", None) extra.pop("description", None) if extra: extra_string = " `{}`".format(json.dumps(extra)) else: extra_string = "" m.stmt("* {name!r}{description}{extra}".format( name=name, description=description, extra=extra_string)) if body: m.stmt("") m.stmt(rename_dict["body"]) m.stmt("\n```") with m.scope(): schema = self.resolve_ref(fulldata, body[0]["schema"]) json_str = json.dumps(schema, ensure_ascii=False, indent=2) for line in json_str.split("\n"): m.stmt(line) m.stmt("```") return str(m)
choices=list(logging._nameToLevel.keys())) parser.add_argument("--emit", default="schema", choices=["schema", "info"]) parser.add_argument("--dst", type=argparse.FileType('w'), default=None) parser.add_argument("src", type=argparse.FileType('r')) args = parser.parse_args() logging.basicConfig(level=args.logging) annotations = {} if args.annotations: annotations = loading.load(args.annotations) detector = Detector() emitter = Emitter(annotations) loading.setup() data = loading.load(args.src) info = detector.detect(data, args.name) if args.emit == "info": loading.dumpfile(info, filename=args.dst) else: m = Module(indent=" ") m.stmt(args.name) emitter.emit(info, m) if args.show_minimap: print("# minimap ###") print("# *", end="") print("\n# ".join(str(m).split("\n"))) loading.dumpfile(emitter.doc, filename=args.dst)