32 ) |
32 ) |
33 |
33 |
34 evalrawexp = templateutil.evalrawexp |
34 evalrawexp = templateutil.evalrawexp |
35 evalfuncarg = templateutil.evalfuncarg |
35 evalfuncarg = templateutil.evalfuncarg |
36 evalboolean = templateutil.evalboolean |
36 evalboolean = templateutil.evalboolean |
|
37 evaldate = templateutil.evaldate |
37 evalinteger = templateutil.evalinteger |
38 evalinteger = templateutil.evalinteger |
38 evalstring = templateutil.evalstring |
39 evalstring = templateutil.evalstring |
39 evalstringliteral = templateutil.evalstringliteral |
40 evalstringliteral = templateutil.evalstringliteral |
40 |
41 |
41 # dict of template built-in functions |
42 # dict of template built-in functions |
371 The default is local date.""" |
372 The default is local date.""" |
372 if not (1 <= len(args) <= 2): |
373 if not (1 <= len(args) <= 2): |
373 # i18n: "localdate" is a keyword |
374 # i18n: "localdate" is a keyword |
374 raise error.ParseError(_("localdate expects one or two arguments")) |
375 raise error.ParseError(_("localdate expects one or two arguments")) |
375 |
376 |
376 date = evalfuncarg(context, mapping, args[0]) |
377 date = evaldate(context, mapping, args[0], |
377 try: |
378 # i18n: "localdate" is a keyword |
378 date = dateutil.parsedate(date) |
379 _("localdate expects a date information")) |
379 except AttributeError: # not str nor date tuple |
|
380 # i18n: "localdate" is a keyword |
|
381 raise error.ParseError(_("localdate expects a date information")) |
|
382 if len(args) >= 2: |
380 if len(args) >= 2: |
383 tzoffset = None |
381 tzoffset = None |
384 tz = evalfuncarg(context, mapping, args[1]) |
382 tz = evalfuncarg(context, mapping, args[1]) |
385 if isinstance(tz, bytes): |
383 if isinstance(tz, bytes): |
386 tzoffset, remainder = dateutil.parsetimezone(tz) |
384 tzoffset, remainder = dateutil.parsetimezone(tz) |