Projet

Général

Profil

0002-general-add-template-access-to-cards-and-forms-43328.patch

Frédéric Péters, 28 juin 2020 14:44

Télécharger (4,95 ko)

Voir les différences:

Subject: [PATCH 2/2] general: add template access to cards and forms (#43328)

 tests/test_carddef.py      | 22 ++++++++++++++++++++++
 tests/test_formdata.py     | 31 +++++++++++++++++++++++++++++++
 wcs/qommon/substitution.py |  3 ++-
 wcs/variables.py           | 31 +++++++++++++++++++++++++++++++
 4 files changed, 86 insertions(+), 1 deletion(-)
tests/test_carddef.py
1 1
import pytest
2 2

  
3 3
from wcs.qommon.http_request import HTTPRequest
4
from wcs.qommon.template import Template
4 5
from wcs.carddef import CardDef
5 6
from wcs.fields import StringField
6 7

  
......
74 75

  
75 76
    carddef2 = CardDef.import_from_xml_tree(carddef_xml)
76 77
    assert carddef2.name == 'foo'
78

  
79

  
80
def test_template_access(pub):
81
    CardDef.wipe()
82
    carddef = CardDef()
83
    carddef.name = 'foo'
84
    carddef.fields = [
85
        StringField(id='1', label='Test', type='string', varname='foo'),
86
    ]
87
    carddef.store()
88
    carddef.data_class().wipe()
89

  
90
    for i in range(10):
91
        carddata = carddef.data_class()()
92
        carddata.data = {'1': 'blah'}
93
        carddata.just_created()
94
        carddata.store()
95

  
96
    context = pub.substitutions.get_context_variables(mode='lazy')
97
    tmpl = Template('{{cards.foo.objects|filter_by:"foo"|filter_value:"blah"|count}}')
98
    assert tmpl.render(context) == '10'
tests/test_formdata.py
929 929
    assert tmpl.render(context) == '7'
930 930

  
931 931

  
932
def test_lazy_global_forms(pub, variable_test_data):
933
    lazy_formdata = variable_test_data
934
    formdef = lazy_formdata._formdef
935
    formdef.store()
936
    data_class = lazy_formdata._formdef.data_class()
937
    for i in range(6):
938
        formdata = data_class()
939
        formdata.data = {'0': 'bar'}
940
        formdata.just_created()
941
        formdata.store()
942
    for i in range(4):
943
        formdata = data_class()
944
        formdata.data = {'0': 'foo'}
945
        formdata.just_created()
946
        formdata.jump_status('finished')
947
        formdata.store()
948

  
949
    formdata = data_class()
950
    formdata.data = {'0': 'bar'}
951
    formdata.status = 'draft'
952
    formdata.store()
953

  
954
    # template tags
955
    context = pub.substitutions.get_context_variables(mode='lazy')
956
    tmpl = Template('{{forms.foobarlazy.slug}}')
957
    assert tmpl.render(context) == 'foobarlazy'
958

  
959
    tmpl = Template('{{forms.foobarlazy.objects|filter_by:"foo_foo"|filter_value:"bar"|count}}')
960
    assert tmpl.render(context) == '7'
961

  
962

  
932 963
def test_lazy_variables(pub, variable_test_data):
933 964
    formdata = FormDef.select()[0].data_class().select()[0]
934 965
    for mode in (None, 'lazy'):
wcs/qommon/substitution.py
41 41

  
42 42
    def set_empty(self):
43 43
        from wcs.data_sources import NamedDataSource
44
        from wcs.variables import CardsSource, FormsSource
44 45
        from wcs.wscalls import NamedWsCall
45 46
        from wcs.scripts import Script
46
        self.sources = [NamedDataSource, NamedWsCall, Script]
47
        self.sources = [NamedDataSource, NamedWsCall, CardsSource, FormsSource, Script]
47 48

  
48 49
    @classmethod
49 50
    def register(cls, varname, category=None, comment=None):
wcs/variables.py
29 29
from .qommon.templatetags.qommon import parse_datetime
30 30
from .qommon.storage import (Or, Equal, NotEqual)
31 31

  
32
from .carddef import CardDef
32 33
from .formdef import FormDef
33 34

  
34 35

  
......
889 890
            field.id = field.varname or field.id
890 891
        data = self._formdef.workflow_options
891 892
        super(LazyFormDefOptions, self).__init__(fields, data)
893

  
894

  
895
class CardsSource:
896
    @classmethod
897
    def get_substitution_variables(cls):
898
        return {'cards': cls()}
899

  
900
    def inspect_keys(self):
901
        return []
902

  
903
    def __getattr__(self, attr):
904
        try:
905
            return LazyFormDef(CardDef.get_by_urlname(attr))
906
        except KeyError:
907
            raise AttributeError(attr)
908

  
909

  
910
class FormsSource:
911
    @classmethod
912
    def get_substitution_variables(cls):
913
        return {'forms': cls()}
914

  
915
    def inspect_keys(self):
916
        return []
917

  
918
    def __getattr__(self, attr):
919
        try:
920
            return LazyFormDef(FormDef.get_by_urlname(attr))
921
        except KeyError:
922
            raise AttributeError(attr)
892
-