Example #1
0
def do_generate():
    pg = Postgres()
    schemas_filter = []

    output_folder = os.environ.get("MARKDOWN_FOLDER", "static/")
    template_name = os.environ.get("TEMPLATE_SRC", "template.md")

    if not os.path.isdir(output_folder):
        logger.error("Path {} is not a directory, cannot continue".format(
            output_folder))
        return

    if not os.path.exists(template_name):
        logger.error(
            "template {} doesn't exist, cannot continue".format(template_name))
        return

    schema_dict = pg.get_schema_dict()
    DEV = '_dev'
    PROD = ''
    schemas = {PROD: [], DEV: []}
    started_at = time.time()

    for schema_name in sorted(schema_dict):
        tables = schema_dict[schema_name]
        if not schemas_filter or schema_name in schemas_filter:
            schema = {
                "schema_name": schema_name,
                "schema_name_anchor": schema_name.lower()
            }
            events = []
            logger.debug("generating schema {}".format(schema_name))
            for table_name in sorted(tables):
                logger.debug("building event data for {}".format(table_name))
                table = pg.get_table(table_name, schema_name, validate=False)
                properties = sorted(table.get_properties())
                sample_event, event_text = table.sample(most_recent=True)
                if not event_text:
                    event_text = table_name
                logger.debug("finished sampling")
                events.append({
                    "event_text":
                    event_text,
                    "event_name":
                    table_name,
                    "event_anchor": (event_text or '').replace(" ",
                                                               "-").lower(),
                    "properties": [{
                        "name": prop
                    } for prop in properties],
                    "sample_event":
                    dump(sample_event),
                })
            schema["events"] = events
            if schema_name[-4:] == DEV:
                schemas[DEV].append(schema)
            else:
                schemas[PROD].append(schema)
    pg.close()

    for suffix, _schemas in schemas.items():
        out_name = os.path.join(output_folder, "events{}.md".format(suffix))
        with open(out_name, 'w') as f:
            with open(template_name, 'r') as _template:
                template = _template.read()

                logger.info("writing template({}) to {}".format(
                    template_name, out_name))
                out = {
                    "finished_in":
                    round(time.time() - started_at, 2),
                    "schemas":
                    _schemas,
                    "generated_at":
                    str(
                        datetime.datetime.now(pytz.utc).astimezone(
                            pytz.timezone("US/Eastern"))).split(".")[0]
                }
                logger.debug(dump(out))
                md = pystache.render(template, out)
                f.write(md)