Source code for crossbar.shell.idl.generator

###############################################################################
#
# Crossbar.io Shell
# Copyright (c) typedef int GmbH. Licensed under EUPLv1.2.
#
###############################################################################

import argparse
import json
import os
import pprint

import docutils
import jinja2
from jinja2 import Environment, FileSystemLoader

from crossbar.shell.util import hl


[docs] def rst_filter(rst): html = docutils.core.publish_parts(source=rst, writer_name="html")["html_body"] return jinja2.Markup(html)
[docs] def process(schema, template_paths=["templates", "tests/idl"]): # http://jinja.pocoo.org/docs/latest/api/#loaders loader = FileSystemLoader(template_paths, encoding="utf-8", followlinks=False) env = Environment(loader=loader, autoescape=True) env.filters["rst"] = rst_filter tmpl = env.get_template("service.py") print(tmpl) contents = tmpl.render(schema=schema) print(contents)
if __name__ == "__main__":
[docs] parser = argparse.ArgumentParser()
parser.add_argument("infile", help="FlatBuffers JSON schema input file (.json)") parser.add_argument("-t", "--templates", help="Templates folder") parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose processing output.") parser.add_argument("-d", "--debug", action="store_true", help="Enable debug output.") options = parser.parse_args() import txaio txaio.use_twisted() log = txaio.make_logger() txaio.start_logging(level="debug" if options.debug else "info") infile_path = os.path.abspath(options.infile) with open(infile_path, "rb") as f: buf = f.read() log.info("Loading FlatBuffers JSON schema ({} bytes) ...".format(len(buf))) try: schema = json.loads(buf, encoding="utf8") except Exception as e: log.error(e) if options.verbose: log.info("Schema metadata:") schema_meta_str = pprint.pformat(schema["meta"]) # log.info(schema_meta_str) # log.info('{}'.format(schema_meta_str)) print(schema_meta_str) for o in schema["types"].values(): if o["type"] == "interface": log.info("interface: {}".format(hl(o["name"], bold=True))) for s in o["slots"].values(): log.info("{:>12}: {}".format(s["type"], hl(s["name"]))) process(schema)