Projet

Général

Profil

0004-datasource-use-carddef-custom-view-digest-template-a.patch

Lauréline Guérin, 25 juin 2021 10:48

Télécharger (6,85 ko)

Voir les différences:

Subject: [PATCH 4/4] datasource: use carddef custom view digest template as
 text (#45633)

 tests/test_carddef.py | 98 +++++++++++++++++++++++++++++++++++++++++++
 wcs/carddata.py       |  4 +-
 wcs/carddef.py        | 11 +++--
 3 files changed, 108 insertions(+), 5 deletions(-)
tests/test_carddef.py
418 418
    assert CardDef.get_data_source_custom_view('carddef:foo-1:view', carddef=carddef2) is None
419 419
    assert CardDef.get_data_source_custom_view('carddef:foo-2:view', carddef=carddef2).id == custom_view2.id
420 420
    assert CardDef.get_data_source_custom_view('carddef:foo-2:view', carddef=carddef1) is None
421

  
422

  
423
def test_data_source_custom_view_digest(pub):
424
    CardDef.wipe()
425
    carddef = CardDef()
426
    carddef.name = 'foo'
427
    carddef.fields = [
428
        StringField(id='1', label='Test', type='string', varname='foo'),
429
    ]
430
    carddef.digest_templates = {'default': '{{ form_var_foo }}'}
431
    carddef.store()
432
    carddef.data_class().wipe()
433

  
434
    carddata = carddef.data_class()()
435
    carddata.data = {'1': 'Hello'}
436
    carddata.just_created()
437
    carddata.store()
438

  
439
    carddata2 = carddef.data_class()()
440
    carddata2.data = {'1': 'Bye'}
441
    carddata2.just_created()
442
    carddata2.store()
443

  
444
    custom_view = pub.custom_view_class()
445
    custom_view.title = 'view'
446
    custom_view.formdef = carddef
447
    custom_view.columns = {'list': [{'id': 'id'}]}
448
    custom_view.filters = {}
449
    custom_view.visibility = 'datasource'
450
    custom_view.store()
451

  
452
    assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo')] == ['Bye', 'Hello']
453
    assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo:view')] == ['Bye', 'Hello']
454

  
455
    cards = CardDef.get_data_source_items('carddef:foo', query='hello')
456
    assert len(cards) == 1
457
    assert cards[0]['text'] == 'Hello'
458
    cards = CardDef.get_data_source_items('carddef:foo:view', query='hello')
459
    assert len(cards) == 1
460
    assert cards[0]['text'] == 'Hello'
461

  
462
    cards = CardDef.get_data_source_items('carddef:foo', query='foo')
463
    assert len(cards) == 0
464
    cards = CardDef.get_data_source_items('carddef:foo:view', query='foo')
465
    assert len(cards) == 0
466

  
467
    cards = CardDef.get_data_source_items('carddef:foo', get_by_text='Hello')
468
    assert len(cards) == 1
469
    assert cards[0]['text'] == 'Hello'
470
    cards = CardDef.get_data_source_items('carddef:foo:view', get_by_text='Hello')
471
    assert len(cards) == 1
472
    assert cards[0]['text'] == 'Hello'
473

  
474
    cards = CardDef.get_data_source_items('carddef:foo', get_by_text='Hello Foo Bar')
475
    assert len(cards) == 0
476
    cards = CardDef.get_data_source_items('carddef:foo:view', get_by_text='Hello Foo Bar')
477
    assert len(cards) == 0
478

  
479
    carddef.digest_templates = {
480
        'default': '{{ form_var_foo }}',
481
        'custom-view:view': '{{ form_var_foo }} Foo Bar',
482
    }
483
    carddef.store()
484
    # rebuild digests
485
    carddata.store()
486
    carddata2.store()
487

  
488
    assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo')] == ['Bye', 'Hello']
489
    assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo:view')] == [
490
        'Bye Foo Bar',
491
        'Hello Foo Bar',
492
    ]
493

  
494
    cards = CardDef.get_data_source_items('carddef:foo', query='hello')
495
    assert len(cards) == 1
496
    assert cards[0]['text'] == 'Hello'
497
    cards = CardDef.get_data_source_items('carddef:foo:view', query='hello')
498
    assert len(cards) == 1
499
    assert cards[0]['text'] == 'Hello Foo Bar'
500

  
501
    cards = CardDef.get_data_source_items('carddef:foo', query='foo')
502
    assert len(cards) == 0
503
    cards = CardDef.get_data_source_items('carddef:foo:view', query='foo')
504
    assert len(cards) == 2
505
    assert cards[0]['text'] == 'Bye Foo Bar'
506
    assert cards[1]['text'] == 'Hello Foo Bar'
507

  
508
    cards = CardDef.get_data_source_items('carddef:foo', get_by_text='Hello')
509
    assert len(cards) == 1
510
    assert cards[0]['text'] == 'Hello'
511
    cards = CardDef.get_data_source_items('carddef:foo:view', get_by_text='Hello')
512
    assert len(cards) == 0
513

  
514
    cards = CardDef.get_data_source_items('carddef:foo', get_by_text='Hello Foo Bar')
515
    assert len(cards) == 0
516
    cards = CardDef.get_data_source_items('carddef:foo:view', get_by_text='Hello Foo Bar')
517
    assert len(cards) == 1
518
    assert cards[0]['text'] == 'Hello Foo Bar'
wcs/carddata.py
32 32

  
33 33
    formdef = property(get_formdef)
34 34

  
35
    def get_data_source_structured_item(self):
35
    def get_data_source_structured_item(self, digest_key='default'):
36 36
        item = {
37 37
            'id': self.id,
38
            'text': self.default_digest,
38
            'text': self.digests.get(digest_key),
39 39
        }
40 40
        for field in self.formdef.get_all_fields():
41 41
            if not field.varname:
wcs/carddef.py
202 202
            return []
203 203
        criterias = [NotEqual('status', 'draft')]
204 204
        order_by = None
205
        digest_key = 'default'
205 206
        if len(parts) > 2:
206 207
            if custom_view is None:
207 208
                custom_view = cls.get_data_source_custom_view(data_source_id, carddef=carddef)
......
213 214
                if not Template.is_template_string(criteria.value):
214 215
                    continue
215 216
                criteria.value = WorkflowStatusItem.compute(criteria.value)
217
        if custom_view:
218
            view_digest_key = 'custom-view:%s' % custom_view.get_url_slug()
219
            if view_digest_key in (carddef.digest_templates or {}):
220
                digest_key = view_digest_key
216 221

  
217 222
        if query:
218
            criterias.append(ElementILike('digests', 'default', query))
223
            criterias.append(ElementILike('digests', digest_key, query))
219 224
        if get_by_id:
220 225
            try:
221 226
                if int(get_by_id) >= 2 ** 31:
......
228 233
            else:
229 234
                criterias.append(Equal('id', get_by_id))
230 235
        if get_by_text:
231
            criterias.append(ElementEqual('digests', 'default', get_by_text))
236
            criterias.append(ElementEqual('digests', digest_key, get_by_text))
232 237

  
233 238
        items = [
234
            x.get_data_source_structured_item()
239
            x.get_data_source_structured_item(digest_key=digest_key)
235 240
            for x in carddef.data_class().select(clause=criterias, order_by=order_by, limit=limit)
236 241
        ]
237 242
        if order_by is None:
238
-