Projet

Général

Profil

0001-fields-restrict-computed-field-datasource-to-carddef.patch

Lauréline Guérin, 28 juillet 2022 18:06

Télécharger (5,23 ko)

Voir les différences:

Subject: [PATCH] fields: restrict computed field datasource to carddefs
 (#64499)

 tests/admin_pages/test_form.py | 16 +++++++++---
 wcs/data_sources.py            | 45 ++++++++++++++++++++++------------
 wcs/fields.py                  |  2 +-
 3 files changed, 44 insertions(+), 19 deletions(-)
tests/admin_pages/test_form.py
3241 3241
    resp = resp.forms[0].submit().follow()
3242 3242

  
3243 3243
    assert len(FormDef.get(1).fields) == 1
3244
    assert FormDef.get(1).fields[0].key == 'computed'
3245
    assert FormDef.get(1).fields[0].label == 'foobar'
3246
    assert FormDef.get(1).fields[0].varname == 'foobar'
3244
    field = FormDef.get(1).fields[0]
3245
    assert field.key == 'computed'
3246
    assert field.label == 'foobar'
3247
    assert field.varname == 'foobar'
3248

  
3249
    CardDef.wipe()
3250
    carddef = CardDef()
3251
    carddef.name = 'Baz'
3252
    carddef.digest_templates = {'default': 'plop'}
3253
    carddef.store()
3254
    resp = app.get('/backoffice/forms/%s/fields/%s/' % (formdef.id, field.id))
3255
    # only cards
3256
    assert resp.form['data_source$type'].options == [('None', True, 'None'), ('carddef:baz', False, 'Baz')]
3247 3257

  
3248 3258

  
3249 3259
def test_form_category_management_roles(pub, backoffice_user, backoffice_role):
wcs/data_sources.py
55 55

  
56 56
class DataSourceSelectionWidget(CompositeWidget):
57 57
    def __init__(
58
        self, name, value=None, allow_jsonp=True, allow_geojson=False, allow_named_sources=True, **kwargs
58
        self,
59
        name,
60
        value=None,
61
        allow_jsonp=True,
62
        allow_geojson=False,
63
        allow_named_sources=True,
64
        restrict_to_card_sources=False,
65
        **kwargs,
59 66
    ):
60 67
        CompositeWidget.__init__(self, name, value, **kwargs)
61 68

  
62 69
        if not value:
63 70
            value = {}
64 71

  
65
        options = [(None, _('None'), None)]
66

  
67
        if allow_named_sources:
72
        def _add_card_options(options):
68 73
            from wcs.carddef import CardDef
69 74

  
70 75
            cards_options = [
......
78 83
                options.append(OptGroup(_('Cards')))
79 84
                options.extend(cards_options)
80 85

  
86
        def _add_nameddatasource_options(options):
81 87
            admin_accessible = NamedDataSource.is_admin_accessible()
82 88
            nds_options = []
83 89
            nds_agenda_options = []
......
136 142
                        options.append(OptGroup(name or _('Without category')))
137 143
                        options.extend(nds_by_category_names[name])
138 144

  
139
        if len(options) > 1:
140
            options.append(OptGroup(_('Generic Data Sources')))
141
        options.append(('json', _('JSON URL'), 'json', {'data-maybe-datetimes': 'true'}))
142
        if allow_jsonp and (
143
            value.get('type') == 'jsonp' or not get_publisher().has_site_option('disable-jsonp-sources')
144
        ):
145
            options.append(('jsonp', _('JSONP URL'), 'jsonp'))
146
        if allow_geojson:
147
            options.append(('geojson', _('GeoJSON URL'), 'geojson'))
148
        if not get_publisher().has_site_option('disable-python-expressions'):
149
            options.append(('formula', _('Python Expression'), 'python'))
145
        def _add_generic_options(options):
146
            if len(options) > 1:
147
                options.append(OptGroup(_('Generic Data Sources')))
148
            options.append(('json', _('JSON URL'), 'json', {'data-maybe-datetimes': 'true'}))
149
            if allow_jsonp and (
150
                value.get('type') == 'jsonp' or not get_publisher().has_site_option('disable-jsonp-sources')
151
            ):
152
                options.append(('jsonp', _('JSONP URL'), 'jsonp'))
153
            if allow_geojson:
154
                options.append(('geojson', _('GeoJSON URL'), 'geojson'))
155
            if not get_publisher().has_site_option('disable-python-expressions'):
156
                options.append(('formula', _('Python Expression'), 'python'))
157

  
158
        options = [(None, _('None'), None)]
159
        if allow_named_sources:
160
            _add_card_options(options)
161
            if not restrict_to_card_sources:
162
                _add_nameddatasource_options(options)
163
        if not restrict_to_card_sources:
164
            _add_generic_options(options)
150 165

  
151 166
        self.add(
152 167
            SingleSelectWidget,
wcs/fields.py
3932 3932
            data_sources.DataSourceSelectionWidget,
3933 3933
            'data_source',
3934 3934
            value=self.data_source,
3935
            allow_jsonp=False,
3935
            restrict_to_card_sources=True,
3936 3936
            title=_('Data Source'),
3937 3937
            hint=_('This will make linked card data available for expressions.'),
3938 3938
            required=False,
3939
-