From a42a22028c3c6585ca0fa2b9817bcadc8496d3ed Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Thu, 21 May 2015 10:39:54 +0100 Subject: [PATCH] Add event table template. Also inspect arrays for objects. --- event-schemas/schema/v1/m.call.candidates | 1 + templating/build.py | 6 +++++- templating/internal/units.py | 18 +++++++++++++++--- templating/templates/events.tmpl | 18 ++++++++++++++++-- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/event-schemas/schema/v1/m.call.candidates b/event-schemas/schema/v1/m.call.candidates index 185dd267..6475cf51 100644 --- a/event-schemas/schema/v1/m.call.candidates +++ b/event-schemas/schema/v1/m.call.candidates @@ -18,6 +18,7 @@ "description": "Array of objects describing the candidates.", "items": { "type": "object", + "title": "Candidate", "properties": { "sdpMid": { "type": "string", diff --git a/templating/build.py b/templating/build.py index 6c398848..cf4a7e2e 100755 --- a/templating/build.py +++ b/templating/build.py @@ -79,9 +79,12 @@ def main(file_stream=None, out_dir=None): return code - def indent(input, indent): + def indent_block(input, indent): return input.replace("\n", ("\n" + " "*indent)) + def indent(input, indent): + return " "*indent + input + def wrap(input, wrap=80): return '\n'.join(textwrap.wrap(input, wrap)) @@ -92,6 +95,7 @@ def main(file_stream=None, out_dir=None): ) env.filters["jsonify"] = jsonify env.filters["indent"] = indent + env.filters["indent_block"] = indent_block env.filters["wrap"] = wrap # load up and parse the lowest single units possible: we don't know or care diff --git a/templating/internal/units.py b/templating/internal/units.py index c108657e..f176a4b9 100644 --- a/templating/internal/units.py +++ b/templating/internal/units.py @@ -53,7 +53,7 @@ def _load_schemas(): for key_name in props: value_type = None required = key_name in required_keys - desc = props[key_name].get("description") + desc = props[key_name].get("description", "") if props[key_name]["type"] == "object": if props[key_name].get("additionalProperties"): @@ -67,8 +67,19 @@ def _load_schemas(): props[key_name], enforce_title=True ) - value_type = nested_object[0]["title"] + value_type = "{%s}" % nested_object[0]["title"] tables += nested_object + elif props[key_name]["type"] == "array": + # if the items of the array are objects then recurse + if props[key_name]["items"]["type"] == "object": + nested_object = get_content_fields( + props[key_name]["items"], + enforce_title=True + ) + value_type = "[%s]" % nested_object[0]["title"] + tables += nested_object + else: + value_type = "[%s]" % props[key_name]["type"] else: value_type = props[key_name]["type"] @@ -76,7 +87,8 @@ def _load_schemas(): "key": key_name, "type": value_type, "required": required, - "desc": desc + "desc": desc, + "req_str": "**Required.** " if required else "" }) return tables diff --git a/templating/templates/events.tmpl b/templating/templates/events.tmpl index f2fbb3e7..778b2df2 100644 --- a/templating/templates/events.tmpl +++ b/templating/templates/events.tmpl @@ -1,9 +1,23 @@ ``{{event.type}}`` {{(4 + event.type | length) * '-'}} -{{event.desc}} +{{event.desc or ""}} +{% for table in event.content_fields -%} +{{"``"+table.title+"``" if table.title else ""}} -{{event.content_fields | jsonify(4,4)}} +================== ================= =========================================== + Key Type Description +================== ================= =========================================== +{% for row in table.rows -%} +{# -#} +{# Row type needs to prepend spaces to line up with the type column (19 ch) -#} +{# Desc needs to prepend the required text (maybe) and prepend spaces too -#} +{# It also needs to then wrap inside the desc col (43 ch width) -#} +{# -#} +{{row.key}}{{row.type|indent(19-row.key|length)}}{{row.req_str | indent(18 - (row.type|length))}}{{row.desc|wrap(43)|indent_block(37)}} +{% endfor -%} +================== ================= =========================================== +{% endfor %} Example:: {{example.content | jsonify(4, 4)}}