diff --git a/specification/index.rst b/specification/index.rst index 8cfd3351..4d422370 100644 --- a/specification/index.rst +++ b/specification/index.rst @@ -17,14 +17,10 @@ Matrix APIs The following APIs are documented in this specification: -- `Client-Server API `_ (%CLIENT_RELEASE_LABEL%) Interaction between clients and servers -- `Server-Server API `_ (%SERVER_RELEASE_LABEL%) Federation between servers -- `Application Service API `_ (%CLIENT_RELEASE_LABEL%) Privileged server plugins -- `Identity Service API `_ (unstable) Mapping of third party IDs with Matrix IDs -- `Push Gateway API `_ (unstable) Push notifications for Matrix events +{{apis}} `Appendices `_ with supplemental information not specific to -of the above APIs is also available. +one of the above APIs is also available. Specification Version --------------------- diff --git a/templating/batesian/units.py b/templating/batesian/units.py index 144cf245..0b665b17 100644 --- a/templating/batesian/units.py +++ b/templating/batesian/units.py @@ -17,9 +17,14 @@ class Units(object): return val - def __init__(self, debug=False): + def __init__(self, debug=False, substitutions=None): self.debug = debug + if substitutions is None: + self.substitutions = {} + else: + self.substitutions = substitutions + def log(self, text): if self.debug: func_name = "" @@ -35,7 +40,10 @@ class Units(object): if not func_name.startswith("load_"): continue unit_key = func_name[len("load_"):] - unit_dict[unit_key] = func() + if len(inspect.getargs(func.func_code).args) > 1: + unit_dict[unit_key] = func(self.substitutions) + else: + unit_dict[unit_key] = func() self.log("Generated unit '%s' : %s" % ( unit_key, json.dumps(unit_dict[unit_key])[:50].replace( "\n","" diff --git a/templating/build.py b/templating/build.py index 4787b7b1..5c74d467 100755 --- a/templating/build.py +++ b/templating/build.py @@ -131,7 +131,10 @@ def main(input_module, files=None, out_dir=None, verbose=False, substitutions={} # which spec section will use it, we just need it there in memory for when # they want it. units = AccessKeyStore( - existing_data=in_mod.exports["units"](debug=verbose).get_units() + existing_data=in_mod.exports["units"]( + debug=verbose, + substitutions=substitutions, + ).get_units() ) # use the units to create RST sections diff --git a/templating/matrix_templates/sections.py b/templating/matrix_templates/sections.py index 2db10a2f..f43a567a 100644 --- a/templating/matrix_templates/sections.py +++ b/templating/matrix_templates/sections.py @@ -176,3 +176,8 @@ class MatrixSections(Sections): def render_common_state_event_fields(self): return self._render_ce_type("state_event") + def render_apis(self): + template = self.env.get_template("apis.tmpl") + apis = self.units.get("apis") + return template.render(apis=apis) + diff --git a/templating/matrix_templates/templates/apis.tmpl b/templating/matrix_templates/templates/apis.tmpl new file mode 100644 index 00000000..943aadc8 --- /dev/null +++ b/templating/matrix_templates/templates/apis.tmpl @@ -0,0 +1,4 @@ +{% import 'tables.tmpl' as tables -%} + +{{ tables.paramtable(apis.rows, ["API", "Version", "Description"]) }} + diff --git a/templating/matrix_templates/units.py b/templating/matrix_templates/units.py index 3064ba7d..c8716bdf 100644 --- a/templating/matrix_templates/units.py +++ b/templating/matrix_templates/units.py @@ -536,6 +536,31 @@ class MatrixUnits(Units): event_types[event_type] = table return event_types + def load_apis(self, substitutions): + return { + "rows": [{ + "key": "`Client-Server API `_", + "type": substitutions["%CLIENT_RELEASE_LABEL%"], + "desc": "Interaction between clients and servers", + }, { + "key": "`Server-Server API `_", + "type": substitutions["%SERVER_RELEASE_LABEL%"], + "desc": "Federation between servers", + }, { + "key": "`Application Service API `_", + "type": substitutions["%CLIENT_RELEASE_LABEL%"], + "desc": "Privileged server plugins", + }, { + "key": "`Identity Service API `_", + "type": "unstable", + "desc": "Mapping of third party IDs with Matrix ID", + }, { + "key": "`Push Gateway API `_", + "type": "unstable", + "desc": "Push notifications for Matrix events", + }] + } + def load_event_examples(self): path = EVENT_EXAMPLES examples = {}