Source code for mario.sphinx_jsonschema

import importlib


sphinx_jsonschema = importlib.import_module("sphinx-jsonschema")

_glob_app = None


[docs]class DefinitionWideFormat(sphinx_jsonschema.wide_format.WideFormat): # type: ignore """Add definition field.""" def _objecttype(self, schema): # create description and type rows rows = self._simpletype(schema) rows.extend(self._objectproperties(schema, "definition")) rows.extend(self._objectproperties(schema, "properties")) rows.extend(self._objectproperties(schema, "patternProperties")) rows.extend(self._bool_or_object(schema, "additionalProperties")) rows.extend(self._kvpairs(schema, self.KV_OBJECT)) return rows def _dispatch(self, schema, label=None): # Main driver of the recursive schema traversal. rows = [] # pylint: disable=no-member self.nesting += 1 if "type" in schema: # select processor for type if "object" in schema["type"]: rows = self._objecttype(schema) elif "array" in schema["type"]: rows = self._arraytype(schema) else: rows = self._simpletype(schema) else: if "description" in schema: rows.append(self._line(self._cell(schema["description"]))) if "$ref" in schema: rows.append( self._line( self._cell( (":ref:`" + schema["$ref"] + "`").replace("#/definitions/", "") ) ) ) for k in self.COMBINATORS: # combinators belong at this level as alternative to type if k in schema: items = [] for s in schema[k]: items.extend(self._dispatch(s, self._cell("-"))) rows.extend(self._prepend(self._cell(k), items)) for k in self.SINGLEOBJECTS: # combinators belong at this level as alternative to type if k in schema: rows.extend(self._dispatch(schema[k], self._cell(k))) # definitions aren't really type equiv's but still best place for them rows.extend(self._objectproperties(schema, "definitions")) if label is not None: # prepend label column if required rows = self._prepend(label, rows) # pylint: disable=no-member self.nesting -= 1 return rows
[docs]class DefinitionJsonSchema(sphinx_jsonschema.JsonSchema): # type: ignore
[docs] def run(self): # pylint: disable=redefined-builtin # pylint: disable=protected-access format = DefinitionWideFormat( self.state, self.lineno, sphinx_jsonschema._glob_app ) return format.transform(self.schema)
[docs]def setup(app): global _glob_app # pylint: disable=global-statement _glob_app = app app.add_directive("jsonschema", DefinitionJsonSchema)