Projet

Général

Profil

0001-fields-add-spreadsheet-export-support-for-block-fiel.patch

Frédéric Péters, 07 août 2020 15:04

Télécharger (3,28 ko)

Voir les différences:

Subject: [PATCH] fields: add spreadsheet export support for block fields
 (#45792)

 tests/test_backoffice_pages.py | 45 ++++++++++++++++++++++++++++++++++
 wcs/fields.py                  | 16 ++++++++++++
 2 files changed, 61 insertions(+)
tests/test_backoffice_pages.py
1472 1472
    assert resp_csv.text.splitlines()[1].split(',')[-1] == 'No'
1473 1473

  
1474 1474

  
1475
def test_backoffice_csv_export_block(pub):
1476
    create_superuser(pub)
1477
    create_environment(pub)
1478

  
1479
    block = BlockDef()
1480
    block.name = 'foobar'
1481
    block.fields = [
1482
        fields.StringField(id='123', required=True, label='Test', type='string', varname='foo'),
1483
        fields.StringField(id='234', required=True, label='Test2', type='string', varname='bar'),
1484
    ]
1485
    block.digest_template = 'X{{foobar_var_foo}}Y'
1486
    block.store()
1487

  
1488
    formdef = FormDef.get_by_urlname('form-title')
1489
    formdef.fields = []
1490
    formdef.store()  # make sure sql column is removed
1491
    formdef.fields = [
1492
        fields.BlockField(id='1', label='test', type='block:foobar', max_items=3),
1493
    ]
1494
    formdef.store()
1495

  
1496
    formdef.data_class().wipe()
1497
    formdata = formdef.data_class()()
1498
    formdata.data = {}
1499
    formdata.data['1'] = {
1500
        'data': [
1501
            {'123': 'foo', '234': 'bar'},
1502
            {'123': 'foo2', '234': 'bar2'},
1503
        ],
1504
        'schema': {'123': 'string', '234': 'string'},
1505
    }
1506
    formdata.just_created()
1507
    formdata.jump_status('new')
1508
    formdata.store()
1509

  
1510
    app = login(get_app(pub))
1511
    resp = app.get('/backoffice/management/form-title/')
1512
    resp_csv = resp.click('Export as CSV File')
1513
    resp.forms['listing-settings']['1'].checked = True
1514
    resp = resp.forms['listing-settings'].submit()
1515
    resp_csv = resp.click('Export as CSV File')
1516
    assert resp_csv.text.splitlines()[0].split(',')[-3:] == ['test - 1', 'test - 2', 'test - 3']
1517
    assert resp_csv.text.splitlines()[1].split(',')[-3:] == ['XfooY', 'Xfoo2Y', '']
1518

  
1519

  
1475 1520
def test_backoffice_ods(pub):
1476 1521
    create_superuser(pub)
1477 1522
    create_environment(pub)
wcs/fields.py
2711 2711
                r += htmltext('</div>\n')
2712 2712
        return r.getvalue()
2713 2713

  
2714
    def get_csv_heading(self):
2715
        nb_items = (self.max_items or 1)
2716
        if nb_items == 1:
2717
            return [self.label]
2718
        headings = ['%s - %s' % (self.label, x + 1) for x in range(nb_items)]
2719
        return headings
2720

  
2721
    def get_csv_value(self, value, **kwargs):
2722
        nb_items = (self.max_items or 1)
2723
        cells = [''] * nb_items
2724
        if value and value.get('data'):
2725
            for i, subvalue in enumerate(value.get('data')[:nb_items]):
2726
                if subvalue:
2727
                    cells[i] = self.block.get_display_value(subvalue)
2728
        return cells
2729

  
2714 2730

  
2715 2731
def get_field_class_by_type(type):
2716 2732
    for k in field_classes:
2717
-