templatetags: display required fields on json schema (#70174)
This commit is contained in:
parent
e4917337e4
commit
66248abe7b
|
@ -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:
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue