From 2acda71bb3b882973b2a989875d955a67c1fa7d0 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Thu, 1 Nov 2018 13:48:50 +0100 Subject: [PATCH] Change slugs to ascii only Some tools like the AWS CLI don't do well with unicode file names even though AWS S3 does not have a problem with them. It is saver to use ASCII characters only. Which is the default for Django's builtin slugify method anyways. --- dynamic_filenames.py | 12 ++++++++---- tests/test_dynamic_filenames.py | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/dynamic_filenames.py b/dynamic_filenames.py index 8e6fab0..ee6d849 100644 --- a/dynamic_filenames.py +++ b/dynamic_filenames.py @@ -4,10 +4,14 @@ import uuid from string import Formatter -try: # use unicode-slugify library if installed - from slugify import slugify -except ImportError: - from django.utils.text import slugify + +def slugify(value): + try: # use unicode-slugify library if installed + from slugify import slugify as _slugify + return _slugify(value, only_ascii=True) + except ImportError: + from django.utils.text import slugify as _slugify + return _slugify(value, allow_unicode=False) class SlugFormatter(Formatter): diff --git a/tests/test_dynamic_filenames.py b/tests/test_dynamic_filenames.py index 3796103..752cb24 100644 --- a/tests/test_dynamic_filenames.py +++ b/tests/test_dynamic_filenames.py @@ -100,8 +100,8 @@ def test_call__name_override(self): def test_call__slug(self): assert FilePattern(filename_pattern='{instance.title:slug}{ext}')( - instance=DefaultModel(title='best model'), filename='some_file.txt' - ) == 'best-model.txt' + instance=DefaultModel(title='best model with ünicode'), filename='some_file.txt' + ) == 'best-model-with-unicode.txt' def test_call__slug_precision(self): assert FilePattern(filename_pattern='{instance.title:.4slug}{ext}')(