From ecdca50fd95ef5bdfbbf8084b0afffe08f565265 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Mon, 23 Jan 2017 18:15:03 +0100 Subject: Add datetimeformat and slugify filters slugify already existed in the backend but was missing in deploystatic. datetimeformat performs strftime() if the passed value is a date or time object, and converts it to such an object to do strftime() on it if it is not. --- tools/deploystatic/deploystatic.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'tools/deploystatic/deploystatic.py') diff --git a/tools/deploystatic/deploystatic.py b/tools/deploystatic/deploystatic.py index 549dafb4..6433de64 100755 --- a/tools/deploystatic/deploystatic.py +++ b/tools/deploystatic/deploystatic.py @@ -11,6 +11,8 @@ import filecmp import shutil import json import random +import re +import unicodedata import io import subprocess import tarfile @@ -18,6 +20,9 @@ import tarfile import jinja2 import jinja2.sandbox +from datetime import datetime, date, time +import dateutil.parser + # # Some useful filters. We include them inline in this file to make it # standalone useful. @@ -37,9 +42,27 @@ def filter_shuffle(l): except: return l +# Format a datetime. If it'sa datetime, call strftime. If it's a +# string, assume it's iso format and convert it to a date first. +def filter_datetimeformat(value, fmt): + if isinstance(value, date) or isinstance(value, datetime) or isinstance(value,time): + return value.strftime(fmt) + else: + return dateutil.parser.parse(value).strftime(fmt) + +# Slugify a text +def filter_slugify(value): + if not value: + return '' + value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii') + value = re.sub(r'[^\w\s-]', '', value).strip().lower() + return re.sub(r'[-\s]+', '-', value) + global_filters = { 'groupby_sort': filter_groupby_sort, 'shuffle': filter_shuffle, + 'slugify': filter_slugify, + 'datetimeformat': filter_datetimeformat, } -- cgit v1.2.3