|
1 |
import datetime
|
1 |
2 |
import os
|
2 |
3 |
import shutil
|
3 |
4 |
import time
|
... | ... | |
48 |
49 |
t = Template('{{ someday|parse_date|date:"Y m d" }}')
|
49 |
50 |
expected = '2015 04 15'
|
50 |
51 |
assert t.render(Context({'someday': '2015-04-15'})) == expected
|
51 |
|
assert t.render(Context({'someday': '2015-04-15T13:11:12Z'})) == ''
|
|
52 |
assert t.render(Context({'someday': '2015-04-15T13:11:12Z'})) == expected
|
52 |
53 |
assert t.render(Context({'someday': 'foobar'})) == ''
|
53 |
54 |
assert t.render(Context({'someday': ''})) == ''
|
54 |
55 |
assert t.render(Context({'someday': None})) == ''
|
... | ... | |
201 |
202 |
assert t.render(context) == ''
|
202 |
203 |
context = Context({'foo': 'bar'})
|
203 |
204 |
assert t.render(context) == 'ok'
|
|
205 |
|
|
206 |
def test_datetime_templatetags():
|
|
207 |
tmpl = Template('{{ plop|datetime }}')
|
|
208 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32'})) == 'Dec. 21, 2017, 10:32 a.m.'
|
|
209 |
assert tmpl.render(Context({'plop': '21/12/2017 10h32'})) == 'Dec. 21, 2017, 10:32 a.m.'
|
|
210 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == 'Dec. 21, 2017, midnight'
|
|
211 |
assert tmpl.render(Context({'plop': '21/12/2017'})) == 'Dec. 21, 2017, midnight'
|
|
212 |
assert tmpl.render(Context({'plop': '10h32'})) == ''
|
|
213 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
214 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
215 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
216 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
217 |
assert tmpl.render(Context()) == ''
|
|
218 |
|
|
219 |
tmpl = Template('{{ plop|datetime:"d i" }}')
|
|
220 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32'})) == '21 32'
|
|
221 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32:42'})) == '21 32'
|
|
222 |
assert tmpl.render(Context({'plop': '21/12/2017 10:32'})) == '21 32'
|
|
223 |
assert tmpl.render(Context({'plop': '21/12/2017 10:32:42'})) == '21 32'
|
|
224 |
assert tmpl.render(Context({'plop': '21/12/2017 10h32'})) == '21 32'
|
|
225 |
assert tmpl.render(Context({'plop': '21/12/2017'})) == '21 00'
|
|
226 |
assert tmpl.render(Context({'plop': '10h32'})) == ''
|
|
227 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
228 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
229 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
230 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
231 |
assert tmpl.render(Context()) == ''
|
|
232 |
|
|
233 |
tmpl = Template('{% if d1|datetime > d2|datetime %}d1>d2{% else %}d1<=d2{% endif %}')
|
|
234 |
assert tmpl.render(Context({'d1': '2017-12-22', 'd2': '2017-12-21'})) == 'd1>d2'
|
|
235 |
assert tmpl.render(Context({'d1': '2017-12-21', 'd2': '2017-12-21'})) == 'd1<=d2'
|
|
236 |
assert tmpl.render(Context({'d1': '2017-12-21 10:30', 'd2': '2017-12-21 09:00'})) == 'd1>d2'
|
|
237 |
assert tmpl.render(Context({'d1': '2017-12-21 10:30', 'd2': '2017-12-21'})) == 'd1>d2'
|
|
238 |
assert tmpl.render(Context({'d1': '2017-12-22'})) == 'd1<=d2'
|
|
239 |
assert tmpl.render(Context({'d2': '2017-12-22'})) == 'd1<=d2'
|
|
240 |
|
|
241 |
tmpl = Template('{{ plop|date }}')
|
|
242 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == 'Dec. 21, 2017'
|
|
243 |
assert tmpl.render(Context({'plop': '21/12/2017'})) == 'Dec. 21, 2017'
|
|
244 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32'})) == 'Dec. 21, 2017'
|
|
245 |
assert tmpl.render(Context({'plop': '21/12/2017 10:32'})) == 'Dec. 21, 2017'
|
|
246 |
assert tmpl.render(Context({'plop': '21/12/2017 10h32'})) == 'Dec. 21, 2017'
|
|
247 |
assert tmpl.render(Context({'plop': '21/12/2017 10:32:42'})) == 'Dec. 21, 2017'
|
|
248 |
assert tmpl.render(Context({'plop': '10:32'})) == ''
|
|
249 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
250 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
251 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
252 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
253 |
assert tmpl.render(Context()) == ''
|
|
254 |
|
|
255 |
tmpl = Template('{{ plop|date:"d" }}')
|
|
256 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == '21'
|
|
257 |
assert tmpl.render(Context({'plop': '21/12/2017'})) == '21'
|
|
258 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32'})) == '21'
|
|
259 |
assert tmpl.render(Context({'plop': '10:32'})) == ''
|
|
260 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
261 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
262 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
263 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
264 |
assert tmpl.render(Context()) == ''
|
|
265 |
|
|
266 |
tmpl = Template('{% if d1|date > d2|date %}d1>d2{% else %}d1<=d2{% endif %}')
|
|
267 |
assert tmpl.render(Context({'d1': '2017-12-22', 'd2': '2017-12-21'})) == 'd1>d2'
|
|
268 |
assert tmpl.render(Context({'d1': '2017-12-21', 'd2': '2017-12-21'})) == 'd1<=d2'
|
|
269 |
assert tmpl.render(Context({'d1': '2017-12-22'})) == 'd1<=d2'
|
|
270 |
assert tmpl.render(Context({'d2': '2017-12-22'})) == 'd1<=d2'
|
|
271 |
|
|
272 |
tmpl = Template('{{ plop|time }}')
|
|
273 |
assert tmpl.render(Context({'plop': '10:32'})) == '10:32 a.m.'
|
|
274 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32'})) == '10:32 a.m.'
|
|
275 |
assert tmpl.render(Context({'plop': '21/12/2017 10h32'})) == '10:32 a.m.'
|
|
276 |
assert tmpl.render(Context({'plop': '21/12/2017'})) == 'midnight'
|
|
277 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
278 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
279 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
280 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
281 |
assert tmpl.render(Context()) == ''
|
|
282 |
|
|
283 |
tmpl = Template('{{ plop|time:"H i" }}')
|
|
284 |
assert tmpl.render(Context({'plop': '10:32'})) == '10 32'
|
|
285 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32'})) == '10 32'
|
|
286 |
assert tmpl.render(Context({'plop': '21/12/2017 10h32'})) == '10 32'
|
|
287 |
assert tmpl.render(Context({'plop': '21/12/2017'})) == '00 00'
|
|
288 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
289 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
290 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
291 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
292 |
assert tmpl.render(Context()) == ''
|
|
293 |
|
|
294 |
# old fashion, with parse_*
|
|
295 |
tmpl = Template('{{ plop|parse_datetime|date:"d i" }}')
|
|
296 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32'})) == '21 32'
|
|
297 |
assert tmpl.render(Context({'plop': '2017-12-21 10:32:42'})) == '21 32'
|
|
298 |
assert tmpl.render(Context({'plop': '21/12/2017 10:32'})) == '21 32'
|
|
299 |
assert tmpl.render(Context({'plop': '21/12/2017 10:32:42'})) == '21 32'
|
|
300 |
assert tmpl.render(Context({'plop': '21/12/2017 10h32'})) == '21 32'
|
|
301 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
302 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
303 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
304 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
305 |
assert tmpl.render(Context()) == ''
|
|
306 |
|
|
307 |
tmpl = Template('{{ plop|parse_date|date:"d" }}')
|
|
308 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == '21'
|
|
309 |
assert tmpl.render(Context({'plop': '21/12/2017'})) == '21'
|
|
310 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
311 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
312 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
313 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
314 |
assert tmpl.render(Context()) == ''
|
|
315 |
|
|
316 |
tmpl = Template('{{ plop|parse_time|date:"H i" }}')
|
|
317 |
assert tmpl.render(Context({'plop': '10:32'})) == '10 32'
|
|
318 |
assert tmpl.render(Context({'plop': 'x'})) == ''
|
|
319 |
assert tmpl.render(Context({'plop': None})) == ''
|
|
320 |
assert tmpl.render(Context({'plop': 3})) == ''
|
|
321 |
assert tmpl.render(Context({'plop': {'foo': 'bar'}})) == ''
|
|
322 |
assert tmpl.render(Context()) == ''
|
|
323 |
|
|
324 |
|
|
325 |
def test_date_maths():
|
|
326 |
tmpl = Template('{{ plop|add_days:4 }}')
|
|
327 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == 'Dec. 25, 2017'
|
|
328 |
assert tmpl.render(Context({'plop': '2017-12-21 18:00'})) == 'Dec. 25, 2017'
|
|
329 |
tmpl = Template('{{ plop|add_days:"-1" }}')
|
|
330 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == 'Dec. 20, 2017'
|
|
331 |
assert tmpl.render(Context({'plop': '2017-12-21 18:00'})) == 'Dec. 20, 2017'
|
|
332 |
tmpl = Template('{{ plop|add_days:1.5 }}')
|
|
333 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == 'Dec. 22, 2017'
|
|
334 |
assert tmpl.render(Context({'plop': '2017-12-21 18:00'})) == 'Dec. 22, 2017'
|
|
335 |
tmpl = Template('{{ plop|add_days:"1.5" }}')
|
|
336 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == 'Dec. 22, 2017'
|
|
337 |
assert tmpl.render(Context({'plop': '2017-12-21 18:00'})) == 'Dec. 22, 2017'
|
|
338 |
|
|
339 |
tmpl = Template('{{ plop|add_hours:24 }}')
|
|
340 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == 'Dec. 22, 2017, midnight'
|
|
341 |
assert tmpl.render(Context({'plop': '2017-12-21 18:00'})) == 'Dec. 22, 2017, 6 p.m.'
|
|
342 |
tmpl = Template('{{ plop|add_hours:"12.5" }}')
|
|
343 |
assert tmpl.render(Context({'plop': '2017-12-21'})) == 'Dec. 21, 2017, 12:30 p.m.'
|
|
344 |
assert tmpl.render(Context({'plop': '2017-12-21 18:00'})) == 'Dec. 22, 2017, 6:30 a.m.'
|
|
345 |
|
|
346 |
|
|
347 |
def test_age_in():
|
|
348 |
context = {
|
|
349 |
'form_var_datefield': time.strptime('2018-07-31', '%Y-%m-%d'),
|
|
350 |
'form_var_datefield2': time.strptime('2018-08-31', '%Y-%m-%d'),
|
|
351 |
'form_var_datestring': '2018-07-31',
|
|
352 |
'today': datetime.date.today(),
|
|
353 |
'now': datetime.datetime.now(),
|
|
354 |
}
|
|
355 |
for condition_value in ( # hope date is > 2018
|
|
356 |
# age_in_days
|
|
357 |
'"1970-01-01"|age_in_days > 0',
|
|
358 |
'"01/01/1970"|age_in_days > 0',
|
|
359 |
'"2500-01-01"|age_in_days < 0',
|
|
360 |
'"01/01/2500"|age_in_days < 0',
|
|
361 |
'form_var_datefield|age_in_days > 50',
|
|
362 |
'form_var_datefield|age_in_days:form_var_datestring == 0',
|
|
363 |
'form_var_datefield|age_in_days:form_var_datefield2 == 31',
|
|
364 |
'form_var_datefield2|age_in_days:form_var_datefield == -31',
|
|
365 |
'form_var_datefield|age_in_days:form_var_datefield == 0',
|
|
366 |
'form_var_datestring|age_in_days:form_var_datefield == 0',
|
|
367 |
'form_var_datestring|age_in_days:form_var_datestring == 0',
|
|
368 |
'today|add_days:-5|age_in_days == 5',
|
|
369 |
'today|add_days:5|age_in_days == -5',
|
|
370 |
'today|age_in_days == 0',
|
|
371 |
# with datetimes
|
|
372 |
'"1970-01-01 02:03"|age_in_days > 0',
|
|
373 |
'"01/01/1970 02h03"|age_in_days > 0',
|
|
374 |
'"2500-01-01 02:03"|age_in_days < 0',
|
|
375 |
'"01/01/2500 02h03"|age_in_days < 0',
|
|
376 |
'now|age_in_days == 0',
|
|
377 |
'now|add_hours:-24|age_in_days == 1',
|
|
378 |
'now|add_hours:24|age_in_days == -1',
|
|
379 |
'"2010-11-12 13:14"|age_in_days:"2010-11-12 13:14" == 0',
|
|
380 |
'"2010-11-12 13:14"|age_in_days:"2010-11-12 12:14" == 0',
|
|
381 |
'"2010-11-12 13:14"|age_in_days:"2010-11-12 14:14" == 0',
|
|
382 |
'"2010-11-12 13:14"|age_in_days:"2010-11-13 13:13" == 1',
|
|
383 |
'"2010-11-12 13:14"|age_in_days:"2010-11-13 13:15" == 1',
|
|
384 |
|
|
385 |
# age_in_hours
|
|
386 |
'now|add_hours:-5|age_in_hours == 5',
|
|
387 |
'now|add_hours:25|age_in_hours == -24',
|
|
388 |
'now|age_in_hours == 0',
|
|
389 |
'"2010-11-12 13:14"|age_in_hours:"2010-11-12 13:14" == 0',
|
|
390 |
'"2010-11-12 13:14"|age_in_hours:"2010-11-12 12:14" == -1',
|
|
391 |
'"2010-11-12 13:14"|age_in_hours:"2010-11-12 14:14" == 1',
|
|
392 |
'"2010-11-12 13:14"|age_in_hours:"2010-11-13 13:13" == 23',
|
|
393 |
'"2010-11-12 13:14"|age_in_hours:"2010-11-13 13:15" == 24',
|
|
394 |
'"1970-01-01 02:03"|age_in_hours > 0',
|
|
395 |
'"01/01/1970 02h03"|age_in_hours > 0',
|
|
396 |
'"2500-01-01 02:03"|age_in_hours < 0',
|
|
397 |
'"01/01/2500 02h03"|age_in_hours < 0',
|
|
398 |
# with dates
|
|
399 |
'"1970-01-01"|age_in_hours > 0',
|
|
400 |
'"01/01/1970"|age_in_hours > 0',
|
|
401 |
'"2500-01-01"|age_in_hours < 0',
|
|
402 |
'"01/01/2500"|age_in_hours < 0',
|
|
403 |
'form_var_datefield|age_in_hours > 1200',
|
|
404 |
'form_var_datefield|age_in_hours:form_var_datestring == 0',
|
|
405 |
'form_var_datefield|age_in_hours:form_var_datefield2 == 744', # 31*24
|
|
406 |
'form_var_datefield2|age_in_hours:form_var_datefield == -744',
|
|
407 |
'form_var_datefield|age_in_hours:form_var_datefield == 0',
|
|
408 |
'form_var_datestring|age_in_hours:form_var_datefield == 0',
|
|
409 |
'form_var_datestring|age_in_hours:form_var_datestring == 0',
|
|
410 |
'today|add_days:-1|age_in_hours >= 24',
|
|
411 |
'today|add_days:1|age_in_hours <= -0',
|
|
412 |
'today|add_days:1|age_in_hours >= -24',
|
|
413 |
'today|age_in_hours >= 0',
|
|
414 |
|
|
415 |
# age_in_years
|
|
416 |
'"1970-01-01"|age_in_years > 0',
|
|
417 |
'"01/01/1970"|age_in_years > 0',
|
|
418 |
'"2500-01-01"|age_in_years < 0',
|
|
419 |
'"01/01/2500"|age_in_years < 0',
|
|
420 |
'form_var_datefield|age_in_years:"2019-07-31" == 1',
|
|
421 |
'form_var_datefield|age_in_years:"2019-09-20" == 1',
|
|
422 |
'form_var_datefield|age_in_years:"2020-07-30" == 1',
|
|
423 |
'form_var_datefield|age_in_years:"2020-07-31" == 2',
|
|
424 |
'form_var_datestring|age_in_years:"2019-07-31" == 1',
|
|
425 |
'today|age_in_years == 0',
|
|
426 |
'today|add_days:-500|age_in_years == 1',
|
|
427 |
'today|add_days:-300|age_in_years == 0',
|
|
428 |
'today|add_days:300|age_in_years == -1',
|
|
429 |
'now|age_in_years == 0',
|
|
430 |
'now|add_days:-500|age_in_years == 1',
|
|
431 |
'now|add_days:-300|age_in_years == 0',
|
|
432 |
'now|add_days:300|age_in_years == -1',
|
|
433 |
'"1970-01-01 02:03"|age_in_years > 0',
|
|
434 |
'"2500-01-01 02:03"|age_in_years < 0',
|
|
435 |
|
|
436 |
# age_in_months
|
|
437 |
'form_var_datefield|age_in_months:form_var_datefield2 == 1',
|
|
438 |
'form_var_datefield2|age_in_months:form_var_datefield == -1',
|
|
439 |
'form_var_datefield|age_in_months:"2019-07-31" == 12',
|
|
440 |
'form_var_datefield|age_in_months:"2019-08-20" == 12',
|
|
441 |
'form_var_datefield|age_in_months:"2019-09-20" == 13',
|
|
442 |
'form_var_datestring|age_in_months:"2019-09-20" == 13',
|
|
443 |
'"1970-01-01"|age_in_months > 0',
|
|
444 |
'"01/01/1970"|age_in_months > 0',
|
|
445 |
'"2500-01-01"|age_in_months < 0',
|
|
446 |
'"01/01/2500"|age_in_months < 0',
|
|
447 |
'"1970-01-01 02:03"|age_in_months > 0',
|
|
448 |
'"2500-01-01 02:03"|age_in_months < 0',
|
|
449 |
|
|
450 |
# fail produce empty string
|
|
451 |
'foobar|age_in_days == ""',
|
|
452 |
'"foobar"|age_in_days == ""',
|
|
453 |
'"1970-01-01"|age_in_days:"foobar" == ""',
|
|
454 |
'foobar|age_in_hours == ""',
|
|
455 |
'"foobar"|age_in_hours == ""',
|
|
456 |
'"1970-01-01"|age_in_hours:"foobar" == ""',
|
|
457 |
'foobar|age_in_years == ""',
|
|
458 |
'"foobar"|age_in_years == ""',
|
|
459 |
'"1970-01-01"|age_in_years:"foobar" == ""',
|
|
460 |
'foobar|age_in_months == ""',
|
|
461 |
'"foobar"|age_in_months == ""',
|
|
462 |
'"1970-01-01"|age_in_months:"foobar" == ""',
|
|
463 |
):
|
|
464 |
tmpl = Template('{%% if %s %%}Good{%% endif %%}' % condition_value)
|
|
465 |
assert tmpl.render(Context(context)) == 'Good'
|
204 |
|
-
|