templatetags: display required fields on json schema (#70174)

This commit is contained in:
Nicolas Roche 2022-10-12 14:17:12 +02:00
parent e4917337e4
commit 66248abe7b
3 changed files with 13 additions and 4 deletions

View File

@ -208,13 +208,13 @@ def render_json_schema(schema):
s += format_html('\n<p class="description">{}</p>', description)
s += ' '
def render_property_schema(key, sub):
def render_property_schema(key, html, sub):
nonlocal s
required = key in required_keys
sub_description = sub.pop('description', '')
sub_title = sub.pop('title', '')
s += format_html('<li>{0}', key)
s += format_html('<li>{0}', html)
if required:
s += format_html('<span title="{}" class="required">*</span>', _('required'))
if description or sub:
@ -238,7 +238,7 @@ def render_json_schema(schema):
keys = sorted(properties, key=lambda key: key.lower())
for key in keys:
sub = properties.get(key, {}).copy()
render_property_schema(format_html('<tt>{0}</tt>', key), sub)
render_property_schema(key, format_html('<tt>{0}</tt>', key), sub)
if one_of and one_of[0].get('required'):
s += many_of('oneOf', one_of)
@ -250,7 +250,7 @@ def render_json_schema(schema):
pattern_key = format_html('/<tt>{0}</tt>/', key)
else:
pattern_key = format_html('<em>any</em>')
render_property_schema(pattern_key, sub)
render_property_schema(key, pattern_key, sub)
s += '</ul>'
if properties or pattern_properties:

View File

@ -18,6 +18,7 @@ import inspect
from django.apps import apps
from django.utils import translation
from pyquery import PyQuery as pq
from passerelle.base.templatetags.passerelle import render_body_schemas, render_json_schema
@ -78,6 +79,13 @@ def test_render_pattern_description():
assert 'abc' not in render_json_schema(schema) and 'efg' in render_json_schema(schema)
def test_render_required_properties():
schema = {'type': 'object', 'required': ['filename'], 'properties': {'filename': {'type': 'string'}}}
html = render_json_schema(schema)
assert pq(html)('li span.required')
assert pq(html)('li').text() == 'filename* : string'
def test_render_oneof_property_required():
schema = {
'type': 'object',

View File

@ -80,6 +80,7 @@ deps =
pylint-django
django-webtest<1.9.3
pytest-freezegun
pyquery
responses
mohawk
ldaptools