summaryrefslogtreecommitdiff
path: root/tools/deploystatic/deploystatic.py
diff options
context:
space:
mode:
authorMagnus Hagander2017-01-23 17:15:03 +0000
committerMagnus Hagander2017-01-23 17:17:41 +0000
commitecdca50fd95ef5bdfbbf8084b0afffe08f565265 (patch)
tree8c9ee99882fbfd5017451990bd6f346870dcdac4 /tools/deploystatic/deploystatic.py
parent3c0974e8e6b149ad93898774f57120faaa7dee0d (diff)
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.
Diffstat (limited to 'tools/deploystatic/deploystatic.py')
-rwxr-xr-xtools/deploystatic/deploystatic.py23
1 files changed, 23 insertions, 0 deletions
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,
}