Projet

Général

Profil

0001-add-new-templatetags-logic-for-date-datetime-time-de.patch

Thomas Noël, 07 décembre 2018 10:40

Télécharger (7,19 ko)

Voir les différences:

Subject: [PATCH] add new templatetags logic for date, datetime, time, decimal
 (#28738)

 tests/test_templates.py           | 86 +++++++++++++++++++++++++++++++
 wcs/qommon/templatetags/qommon.py | 27 ++++++++--
 2 files changed, 110 insertions(+), 3 deletions(-)
tests/test_templates.py
110 110

  
111 111

  
112 112
def test_datetime_templatetags():
113
    tmpl = Template('{{ plop|datetime }}')
114
    assert tmpl.render({'plop': '2017-12-21 10:32'}) == 'Dec. 21, 2017, 10:32 a.m.'
115
    assert tmpl.render({'plop': '21/12/2017 10h32'}) == 'Dec. 21, 2017, 10:32 a.m.'
116
    assert tmpl.render({'plop': '2017-12-21'}) == 'Dec. 21, 2017, midnight'
117
    assert tmpl.render({'plop': '21/12/2017'}) == 'Dec. 21, 2017, midnight'
118
    assert tmpl.render({'plop': '10h32'}) == ''
119
    assert tmpl.render({'plop': 'x'}) == ''
120
    assert tmpl.render({'plop': None}) == ''
121
    assert tmpl.render({'plop': 3}) == ''
122
    assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
123
    assert tmpl.render() == ''
124

  
125
    tmpl = Template('{{ plop|datetime:"d i" }}')
126
    assert tmpl.render({'plop': '2017-12-21 10:32'}) == '21 32'
127
    assert tmpl.render({'plop': '2017-12-21 10:32:42'}) == '21 32'
128
    assert tmpl.render({'plop': '21/12/2017 10:32'}) == '21 32'
129
    assert tmpl.render({'plop': '21/12/2017 10:32:42'}) == '21 32'
130
    assert tmpl.render({'plop': '21/12/2017 10h32'}) == '21 32'
131
    assert tmpl.render({'plop': '21/12/2017'}) == '21 00'
132
    assert tmpl.render({'plop': '10h32'}) == ''
133
    assert tmpl.render({'plop': 'x'}) == ''
134
    assert tmpl.render({'plop': None}) == ''
135
    assert tmpl.render({'plop': 3}) == ''
136
    assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
137
    assert tmpl.render() == ''
138

  
139
    tmpl = Template('{% if d1|datetime > d2|datetime %}d1>d2{% else %}d1<=d2{% endif %}')
140
    assert tmpl.render({'d1': '2017-12-22', 'd2': '2017-12-21'}) == 'd1>d2'
141
    assert tmpl.render({'d1': '2017-12-21', 'd2': '2017-12-21'}) == 'd1<=d2'
142
    assert tmpl.render({'d1': '2017-12-21 10:30', 'd2': '2017-12-21 09:00'}) == 'd1>d2'
143
    assert tmpl.render({'d1': '2017-12-21 10:30', 'd2': '2017-12-21'}) == 'd1>d2'
144
    assert tmpl.render({'d1': '2017-12-22'}) == 'd1<=d2'
145
    assert tmpl.render({'d2': '2017-12-22'}) == 'd1<=d2'
146

  
147
    tmpl = Template('{{ plop|date }}')
148
    assert tmpl.render({'plop': '2017-12-21'}) == 'Dec. 21, 2017'
149
    assert tmpl.render({'plop': '21/12/2017'}) == 'Dec. 21, 2017'
150
    assert tmpl.render({'plop': '2017-12-21 10:32'}) == 'Dec. 21, 2017'
151
    assert tmpl.render({'plop': '21/12/2017 10:32'}) == 'Dec. 21, 2017'
152
    assert tmpl.render({'plop': '21/12/2017 10h32'}) == 'Dec. 21, 2017'
153
    assert tmpl.render({'plop': '21/12/2017 10:32:42'}) == 'Dec. 21, 2017'
154
    assert tmpl.render({'plop': '10:32'}) == ''
155
    assert tmpl.render({'plop': 'x'}) == ''
156
    assert tmpl.render({'plop': None}) == ''
157
    assert tmpl.render({'plop': 3}) == ''
158
    assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
159
    assert tmpl.render() == ''
160

  
161
    tmpl = Template('{{ plop|date:"d" }}')
162
    assert tmpl.render({'plop': '2017-12-21'}) == '21'
163
    assert tmpl.render({'plop': '21/12/2017'}) == '21'
164
    assert tmpl.render({'plop': '2017-12-21 10:32'}) == '21'
165
    assert tmpl.render({'plop': '10:32'}) == ''
166
    assert tmpl.render({'plop': 'x'}) == ''
167
    assert tmpl.render({'plop': None}) == ''
168
    assert tmpl.render({'plop': 3}) == ''
169
    assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
170
    assert tmpl.render() == ''
171

  
172
    tmpl = Template('{% if d1|date > d2|date %}d1>d2{% else %}d1<=d2{% endif %}')
173
    assert tmpl.render({'d1': '2017-12-22', 'd2': '2017-12-21'}) == 'd1>d2'
174
    assert tmpl.render({'d1': '2017-12-21', 'd2': '2017-12-21'}) == 'd1<=d2'
175
    assert tmpl.render({'d1': '2017-12-22'}) == 'd1<=d2'
176
    assert tmpl.render({'d2': '2017-12-22'}) == 'd1<=d2'
177

  
178
    tmpl = Template('{{ plop|time }}')
179
    assert tmpl.render({'plop': '10:32'}) == '10:32 a.m.'
180
    assert tmpl.render({'plop': 'x'}) == ''
181
    assert tmpl.render({'plop': None}) == ''
182
    assert tmpl.render({'plop': 3}) == ''
183
    assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
184
    assert tmpl.render() == ''
185

  
186
    tmpl = Template('{{ plop|time:"H i" }}')
187
    assert tmpl.render({'plop': '10:32'}) == '10 32'
188
    assert tmpl.render({'plop': 'x'}) == ''
189
    assert tmpl.render({'plop': None}) == ''
190
    assert tmpl.render({'plop': 3}) == ''
191
    assert tmpl.render({'plop': {'foo': 'bar'}}) == ''
192
    assert tmpl.render() == ''
193

  
194
    # old fashion, with parse_*
113 195
    tmpl = Template('{{ plop|parse_datetime|date:"d i" }}')
114 196
    assert tmpl.render({'plop': '2017-12-21 10:32'}) == '21 32'
115 197
    assert tmpl.render({'plop': '2017-12-21 10:32:42'}) == '21 32'
......
152 234
    assert tmpl.render({'plop': 12345.678}) == '12345.678'
153 235
    assert tmpl.render({'plop': None}) == ''
154 236

  
237
    tmpl = Template('{{ plop|decimal:3 }}')
238
    assert tmpl.render({'plop': '3.14'}) == '3.140'
239
    assert tmpl.render({'plop': None}) == ''
240

  
155 241
    tmpl = Template('{% if plop|decimal > 2 %}hello{% endif %}')
156 242
    assert tmpl.render({'plop': 3}) == 'hello'
157 243
    assert tmpl.render({'plop': 1}) == ''
wcs/qommon/templatetags/qommon.py
72 72

  
73 73
@register.filter(expects_localtime=True, is_safe=False)
74 74
def date(value, arg=None):
75
    if arg is None:
76
        return parse_date(value) or ''
75 77
    if not isinstance(value, (datetime.datetime, datetime.date, datetime.time)):
76
        value = parse_date(value)
78
        value = parse_datetime(value)
79
    return defaultfilters.date(value, arg=arg)
80

  
81
@register.filter(name='datetime', expects_localtime=True, is_safe=False)
82
def datetime_(value, arg=None):
83
    if arg is None:
84
        return parse_datetime(value) or ''
85
    if not isinstance(value, (datetime.datetime, datetime.date, datetime.time)):
86
        value = parse_datetime(value)
87
    return defaultfilters.date(value, arg=arg)
88

  
89
@register.filter(expects_localtime=True, is_safe=False)
90
def time(value, arg=None):
91
    if arg is None:
92
        return parse_time(value) or ''
93
    if not isinstance(value, (datetime.datetime, datetime.date, datetime.time)):
94
        value = parse_time(value)
77 95
    return defaultfilters.date(value, arg=arg)
78 96

  
79 97
@register.filter(is_safe=True)
80
def decimal(value):
98
def decimal(value, arg=None):
81 99
    if not value:
82 100
        return ''
83 101
    try:
84 102
        if isinstance(value, basestring):
85 103
            # replace , by . for French users comfort
86 104
            value = value.replace(',', '.')
87
        return Decimal(value).quantize(Decimal('1.0000')).normalize()
105
        value = Decimal(value).quantize(Decimal('1.0000')).normalize()
88 106
    except ArithmeticError:
89 107
        return ''
108
    if arg is None:
109
        return value
110
    return defaultfilters.floatformat(value, arg=arg)
90 111

  
91 112
@register.simple_tag
92 113
def standard_text(text_id):
93
-