Projet

Général

Profil

0001-fields-allow-pickle-lazy-on-bo-table-vairiables-3874.patch

Nicolas Roche, 02 janvier 2020 16:48

Télécharger (4,48 ko)

Voir les différences:

Subject: [PATCH] fields: allow pickle-lazy on bo table vairiables (#38746)

 tests/test_form_pages.py | 73 +++++++++++++++++++++++++++++++++++++++-
 wcs/variables.py         |  6 +++-
 2 files changed, 77 insertions(+), 2 deletions(-)
tests/test_form_pages.py
10 10
import time
11 11
import zipfile
12 12
import base64
13
from webtest import Upload, Hidden
13
from webtest import Upload, Hidden, AppError
14 14
import mock
15 15

  
16 16
try:
......
7152 7152
    resp.forms[0]['f1'] = '2'
7153 7153
    resp = resp.forms[0].submit('submit')
7154 7154
    assert 'style="display: none"' in comment.search(resp.forms[0].text).group(0)
7155

  
7156
def test_workflow_set_bo_table_field(pub):
7157
    user = create_user(pub)
7158

  
7159
    formdef = create_formdef()
7160
    formdef.fields = [
7161
        fields.TableField(
7162
            id='0', label='fo table field', type='table', varname='input',
7163
            rows=['row1', 'row2'], columns=['col1', 'col2']),
7164
    ]
7165
    formdef.store()
7166
    formdef.data_class().wipe()
7167

  
7168
    Workflow.wipe()
7169
    workflow = Workflow(name='test')
7170
    workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
7171
    workflow.backoffice_fields_formdef.fields = [
7172
        fields.TableField(
7173
            id='bo0', label='bo table field',
7174
            type='table', varname='backoffice_table',
7175
            rows=['row1', 'row2'], columns=['col1', 'col2']),
7176
    ]
7177
    st1 = workflow.add_status('Status1', 'st1')
7178
    setbo = SetBackofficeFieldsWorkflowStatusItem()
7179
    setbo.parent = st1
7180
    st1.items.append(setbo)
7181
    workflow.store()
7182

  
7183
    formdef.workflow_id = workflow.id
7184
    formdef.store()
7185

  
7186
    formdef.data_class().wipe()
7187
    expected = [['a1', 'a2'], ['b1', 'b2']]
7188

  
7189
    # python expression must be used here (else we get a string)
7190
    setbo.fields = [
7191
        {'field_id': 'bo0', 'value': '=form_var_input'},
7192
    ]
7193
    workflow.store()
7194
    resp = get_app(pub).get('/test/')
7195
    resp.form['f0$c-0-0'] = 'a1'
7196
    resp.form['f0$c-0-1'] = 'a2'
7197
    resp.form['f0$c-1-0'] = 'b1'
7198
    resp.form['f0$c-1-1'] = 'b2'
7199
    resp = resp.form.submit('submit')  # -> validation page
7200
    resp = resp.form.submit('submit')  # -> submission
7201
    resp = resp.follow()
7202
    assert 'The form has been recorded' in resp.text
7203
    assert formdef.data_class().select()[0].data['0'] == expected
7204
    assert formdef.data_class().select()[0].data['bo0'] == expected
7205

  
7206
    # by using Django template we get a string
7207
    setbo.fields = [
7208
        {'field_id': 'bo0', 'value': '{{ form_var_input }}'},
7209
    ]
7210
    workflow.store()
7211
    resp = get_app(pub).get('/test/')
7212
    resp.form['f0$c-0-0'] = 'a1'
7213
    resp.form['f0$c-0-1'] = 'a2'
7214
    resp.form['f0$c-1-0'] = 'b1'
7215
    resp.form['f0$c-1-1'] = 'b2'
7216
    resp = resp.form.submit('submit')  # -> validation page
7217
    try:
7218
        resp = resp.form.submit('submit')  # -> submission
7219
    except AppError as exc:  # fails on sql metafunc.parametrize
7220
        pass
7221
    else:
7222
        resp = resp.follow()
7223
        assert 'The form has been recorded' in resp.text
7224
        assert formdef.data_class().select()[0].data['0'] == expected
7225
        assert formdef.data_class().select()[0].data['bo0'] == "%s" % expected
wcs/variables.py
480 480
            return LazyFieldVarDate(self._data, field, self._formdata)
481 481
        if field.key == 'map':
482 482
            return LazyFieldVarMap(self._data, field, self._formdata)
483
        if field.key == 'table':
484
            return LazyFieldVarBase(self._data, field, self._formdata)
483 485

  
484 486
        return LazyFieldVar(self._data, field, self._formdata)
485 487

  
......
490 492
            raise AttributeError(attr)
491 493

  
492 494

  
493
class LazyFieldVar(object):
495
class LazyFieldVarBase(object):
494 496
    def __init__(self, data, field, formdata=None):
495 497
        self._data = data
496 498
        self._field = field
......
578 580
    def startswith(self, other):
579 581
        return self.get_value().startswith(other)
580 582

  
583

  
584
class LazyFieldVar(LazyFieldVarBase):
581 585
    def __getstate__(self):
582 586
        raise AssertionError('lazy cannot be pickled')
583 587

  
584
-