Compare commits

..

1 Commits

Author SHA1 Message Date
Serghei Mihai a3d05511b7 wscalls: preview unflattened payload (#66916)
gitea/wcs/pipeline/head This commit looks good Details
2024-04-12 10:03:14 +02:00
3 changed files with 18 additions and 26 deletions

View File

@ -297,8 +297,7 @@ def test_preview_json_payload(pub, admin_user):
}
resp = app.get('/api/preview-json-payload', params=params)
assert resp.pyquery('div.payload-preview div.errornotice').length == 0
assert resp.pyquery('div.payload-preview').text() == '{"user": {"first_name": "Foo","last_name": "Bar",}}'
assert resp.pyquery('div.payload-preview').text() == '{"user": {"first_name": "Foo","last_name": "Bar"}}'
params.update(
{
'request$post_data$element3value$value_template': 'value',
@ -315,14 +314,14 @@ def test_preview_json_payload(pub, admin_user):
)
params = {
'post_data$element1key': '0',
'post_data$element1key': '0/0',
'post_data$element1value$value_template': 'Foo',
'post_data$element1value$value_python': '',
'post_data$element2key': '1',
'post_data$element2key': '0/1',
'post_data$element2value$value_template': '{{ form_name }}',
'post_data$element2value$value_python': '',
'post_data$element3key': '2',
'post_data$element3key': '1/0',
'post_data$element3value$value_template': '',
}
resp = app.get('/api/preview-json-payload', params=params)
assert resp.pyquery('div.payload-preview').text() == '["Foo",{{ form_name }},"",]'
assert resp.pyquery('div.payload-preview').text() == '[["Foo",{{ form_name }}],[""]]'

View File

@ -1465,17 +1465,22 @@ class ApiDirectory(Directory):
payload[order].append(value)
return dict([v for v in payload.values() if len(v) > 1])
def format_payload(o, html=htmltext('')):
def format_payload(o, html=htmltext(''), last_element=True):
if isinstance(o, (list, tuple)):
html += htmltext('[<span class="payload-preview--obj">')
for item in o:
html = format_payload(item, html)
while True:
try:
head, tail = o[0], o[1:]
except IndexError:
break
html = format_payload(head, html=html, last_element=len(tail) < 1)
o = tail
html += htmltext('</span>]')
elif isinstance(o, dict):
html += htmltext('{<span class="payload-preview--obj">')
for k, v in o.items():
for i, (k, v) in enumerate(o.items()):
html += htmltext('<span class="payload-preview--key">"%s"</span>: ' % k)
html = format_payload(v, html)
html = format_payload(v, html=html, last_element=i == len(o) - 1)
html += htmltext('</span>}')
else:
# check if it's empty string, a template with text around or just text
@ -1483,6 +1488,8 @@ class ApiDirectory(Directory):
# and put double quotes
o = '"%s"' % o
html += htmltext('<span class="payload-preview--value">%s</span>' % o)
# last element doesn't need separator
if not last_element:
html += htmltext('<span class="payload-preview--item-separator">,</span>')
return html

View File

@ -3135,27 +3135,13 @@ ul.objects-list.single-links li a.link-action-icon.duplicate {
span.payload-preview {
&--value {
font-family: Monospace;
& + & {
display: block;
}
}
&--value + &--key::before {
content: '\a';
white-space: pre;
}
&--obj {
margin-left: 1em;
display: block;
}
&--item-separator + &--key::before, &--item-separator + &--value::before {
&--item-separator::after {
content: '\a';
white-space: pre;
}
&--obj + &--key::before, &--obj + &--value::before {
content: ',\a';
white-space: pre;
}
&--item-separator:last-child {
display: none;
}
}