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 += format_html('\n<p class="description">{}</p>', description)
|
||||||
s += ' '
|
s += ' '
|
||||||
|
|
||||||
def render_property_schema(key, sub):
|
def render_property_schema(key, html, sub):
|
||||||
nonlocal s
|
nonlocal s
|
||||||
|
|
||||||
required = key in required_keys
|
required = key in required_keys
|
||||||
sub_description = sub.pop('description', '')
|
sub_description = sub.pop('description', '')
|
||||||
sub_title = sub.pop('title', '')
|
sub_title = sub.pop('title', '')
|
||||||
s += format_html('<li>{0}', key)
|
s += format_html('<li>{0}', html)
|
||||||
if required:
|
if required:
|
||||||
s += format_html('<span title="{}" class="required">*</span>', _('required'))
|
s += format_html('<span title="{}" class="required">*</span>', _('required'))
|
||||||
if description or sub:
|
if description or sub:
|
||||||
|
@ -238,7 +238,7 @@ def render_json_schema(schema):
|
||||||
keys = sorted(properties, key=lambda key: key.lower())
|
keys = sorted(properties, key=lambda key: key.lower())
|
||||||
for key in keys:
|
for key in keys:
|
||||||
sub = properties.get(key, {}).copy()
|
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'):
|
if one_of and one_of[0].get('required'):
|
||||||
s += many_of('oneOf', one_of)
|
s += many_of('oneOf', one_of)
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ def render_json_schema(schema):
|
||||||
pattern_key = format_html('/<tt>{0}</tt>/', key)
|
pattern_key = format_html('/<tt>{0}</tt>/', key)
|
||||||
else:
|
else:
|
||||||
pattern_key = format_html('<em>any</em>')
|
pattern_key = format_html('<em>any</em>')
|
||||||
render_property_schema(pattern_key, sub)
|
render_property_schema(key, pattern_key, sub)
|
||||||
s += '</ul>'
|
s += '</ul>'
|
||||||
|
|
||||||
if properties or pattern_properties:
|
if properties or pattern_properties:
|
||||||
|
|
|
@ -18,6 +18,7 @@ import inspect
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
|
from pyquery import PyQuery as pq
|
||||||
|
|
||||||
from passerelle.base.templatetags.passerelle import render_body_schemas, render_json_schema
|
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)
|
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():
|
def test_render_oneof_property_required():
|
||||||
schema = {
|
schema = {
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
|
|
Loading…
Reference in New Issue