Mercurial > piecrust2
comparison piecrust/templating/jinjaengine.py @ 326:1ecc0c16ba64 2.0.0a6
data: Better error message for old date formats, add `emaildate` filter.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 30 Mar 2015 14:43:08 -0700 |
parents | b7ab1b503510 |
children | 938be93215cb |
comparison
equal
deleted
inserted
replaced
325:c750dc21d55d | 326:1ecc0c16ba64 |
---|---|
1 import re | 1 import re |
2 import time | 2 import time |
3 import os.path | 3 import os.path |
4 import logging | 4 import logging |
5 import threading | 5 import threading |
6 import email.utils | |
6 import strict_rfc3339 | 7 import strict_rfc3339 |
7 from jinja2 import Environment, FileSystemLoader, TemplateNotFound | 8 from jinja2 import Environment, FileSystemLoader, TemplateNotFound |
8 from jinja2.exceptions import TemplateSyntaxError | 9 from jinja2.exceptions import TemplateSyntaxError |
9 from jinja2.ext import Extension, Markup | 10 from jinja2.ext import Extension, Markup |
10 from jinja2.lexer import Token, describe_token | 11 from jinja2.lexer import Token, describe_token |
147 'wordcount': get_word_count, | 148 'wordcount': get_word_count, |
148 'stripoutertag': strip_outer_tag, | 149 'stripoutertag': strip_outer_tag, |
149 'stripslash': strip_slash, | 150 'stripslash': strip_slash, |
150 'titlecase': title_case, | 151 'titlecase': title_case, |
151 'atomdate': get_atom_date, | 152 'atomdate': get_atom_date, |
153 'emaildate': get_email_date, | |
152 'date': get_date}) | 154 'date': get_date}) |
153 | 155 |
154 # Backwards compatibility with Twig. | 156 # Backwards compatibility with Twig. |
155 if twig_compatibility_mode is True: | 157 if twig_compatibility_mode is True: |
156 self.filters['raw'] = self.filters['safe'] | 158 self.filters['raw'] = self.filters['safe'] |
237 | 239 |
238 def get_atom_date(value): | 240 def get_atom_date(value): |
239 return strict_rfc3339.timestamp_to_rfc3339_localoffset(int(value)) | 241 return strict_rfc3339.timestamp_to_rfc3339_localoffset(int(value)) |
240 | 242 |
241 | 243 |
244 def get_email_date(value, localtime=False): | |
245 return email.utils.formatdate(value, localtime=localtime) | |
246 | |
247 | |
242 def get_date(value, fmt): | 248 def get_date(value, fmt): |
243 if value == 'now': | 249 if value == 'now': |
244 value = time.time() | 250 value = time.time() |
245 if '%' not in fmt: | 251 if '%' not in fmt: |
246 suggest = php_format_to_strftime_format(fmt) | 252 suggest = php_format_to_strftime_format(fmt) |
253 if suggest != fmt: | |
254 suggest_message = ("You probably want a format that looks " | |
255 "like: '%s'." % suggest) | |
256 else: | |
257 suggest_message = ("We can't suggest a proper date format " | |
258 "for you right now, though.") | |
247 raise Exception("PieCrust 1 date formats won't work in PieCrust 2. " | 259 raise Exception("PieCrust 1 date formats won't work in PieCrust 2. " |
248 "You probably want a format that look like '%s'. " | 260 "%s\n" |
249 "Please check the `strftime` formatting page here: " | 261 "Please check the `strftime` formatting page here: " |
250 "https://docs.python.org/3/library/datetime.html" | 262 "https://docs.python.org/3/library/datetime.html" |
251 "#strftime-and-strptime-behavior" % | 263 "#strftime-and-strptime-behavior" % |
252 suggest) | 264 suggest_message) |
253 return time.strftime(fmt, time.localtime(value)) | 265 return time.strftime(fmt, time.localtime(value)) |
254 | 266 |
255 | 267 |
256 class PieCrustFormatExtension(Extension): | 268 class PieCrustFormatExtension(Extension): |
257 tags = set(['pcformat']) | 269 tags = set(['pcformat']) |