Projet

Général

Profil

0001-backoffice-display-human-type-names-in-inspect-page-.patch

Frédéric Péters, 24 octobre 2021 16:30

Télécharger (4,62 ko)

Voir les différences:

Subject: [PATCH] backoffice: display "human" type names in inspect page
 (#57157)

 tests/backoffice_pages/test_form_inspect.py |  9 +++++++--
 wcs/backoffice/management.py                |  6 +++---
 wcs/qommon/misc.py                          | 19 +++++++++++++++++++
 3 files changed, 29 insertions(+), 5 deletions(-)
tests/backoffice_pages/test_form_inspect.py
118 118
    assert '0' * 1000 in resp.text
119 119
    assert len(resp.text) < 100000
120 120
    pq = resp.pyquery.remove_namespaces()
121
    assert pq('[title="form_var_file"]').parents('li').children('div.value span').text() == 'hello.txt'
122
    assert (
123
        pq('[title="form_var_file_raw"]').parents('li').children('div.value span').text()
124
        == 'hello.txt (file)'
125
    )
121 126
    assert pq('[title="form_var_foo_unicode"]').parents('li').children('div.value span').text() == 'uné'
122 127
    assert (
123 128
        pq('[title="form_var_foo_non_unicode_convertible"]')
......
128 133
    )
129 134
    assert (
130 135
        pq('[title="form_var_foo_str_but_non_utf8"]').parents('li').children('div.value span').text()
131
        == "b'\\xed\\xa0\\x00' (<class 'bytes'>)"
136
        == "b'\\xed\\xa0\\x00' (bytes)"
132 137
    )
133 138

  
134 139
    # don't show «unusable» variables
......
233 238
    assert 'Template rendering' in resp.text
234 239
    assert '<div class="test-tool-result-plain">hello.txt</div>' in resp.text
235 240
    assert 'rendered as an object' in resp.text
236
    assert '<div class="test-tool-result-plain">hello.txt (PicklableUpload)</div>' in resp.text
241
    assert '<div class="test-tool-result-plain">hello.txt (file)</div>' in resp.text
237 242
    assert 'HTML Source' not in resp.text
238 243

  
239 244
    resp.form['template'] = '{% for x in 1 %}ok{% endfor %}'
wcs/backoffice/management.py
63 63
    WidgetList,
64 64
    WysiwygTextWidget,
65 65
)
66
from ..qommon.misc import C_, ellipsize
66
from ..qommon.misc import C_, ellipsize, get_type_name
67 67
from ..qommon.storage import (
68 68
    Contains,
69 69
    Equal,
......
3021 3021
                        r += htmltext('<h3>%s</h3>') % _('Also rendered as an object:')
3022 3022
                        r += htmltext('<div class="test-tool-result-plain">%s (%s)</div>') % (
3023 3023
                            complex_result,
3024
                            complex_result.__class__.__name__,
3024
                            get_type_name(complex_result),
3025 3025
                        )
3026 3026
                    r += htmltext('</div>')
3027 3027
            elif test_mode == 'html_template':
......
3140 3140
                r += htmltext('<li><code title="%s">%s</code>') % (k, k)
3141 3141
                r += htmltext('  <div class="value"><span>%s</span>') % ellipsize(safe(v), 10000)
3142 3142
                if not isinstance(v, str):
3143
                    r += htmltext(' <span class="type">(%r)</span>') % type(v)
3143
                    r += htmltext(' <span class="type">(%s)</span>') % get_type_name(v)
3144 3144
            r += htmltext('</div></li>')
3145 3145
        r += htmltext('</div>')
3146 3146

  
wcs/qommon/misc.py
1046 1046
    response.set_content_type(content_type)
1047 1047
    response.set_header('content-disposition', 'attachment; filename=%s' % filename)
1048 1048
    return '<?xml version="1.0"?>\n' + ET.tostring(etree).decode('utf-8')
1049

  
1050

  
1051
def get_type_name(value):
1052
    from .upload_storage import PicklableUpload
1053

  
1054
    object_type_names = {
1055
        type(None): _('no value'),
1056
        bool: _('boolean'),
1057
        bytes: _('bytes'),
1058
        datetime.datetime: _('datetime'),
1059
        datetime.date: _('date'),
1060
        datetime.time: _('time'),
1061
        decimal.Decimal: _('decimal number'),
1062
        int: _('integer number'),
1063
        str: _('string'),
1064
        PicklableUpload: _('file'),
1065
    }
1066
    object_type_name = object_type_names.get(value.__class__, value.__class__.__name__)
1067
    return object_type_name
1049
-