From 481999a7f9a37185b40a39df912ae2eea3c27902 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Koci=C3=A1n?= Date: Sat, 3 Sep 2016 21:52:08 +0200 Subject: [PATCH] =?UTF-8?q?generate=5Ffilename:=20o=C5=A1et=C5=99uj=20meze?= =?UTF-8?q?ry=20a=20diakritiku?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- korektury/models.py | 8 +++++--- seminar/models.py | 48 ++++++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/korektury/models.py b/korektury/models.py index ff0ba62f..a0c52ec0 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -6,6 +6,7 @@ from django.conf import settings from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import force_unicode from django.core.exceptions import ObjectDoesNotExist +from django.utils.text import get_valid_filename import subprocess from reversion import revisions as reversion @@ -13,10 +14,11 @@ from reversion import revisions as reversion from unidecode import unidecode -# PrilohaReseni method def generate_filename(self, filename): - clean = unidecode( - filename.replace('/', '-').replace('\0', '').replace(":", "_") + clean = get_valid_filename( + unidecode( + filename.replace('/', '-').replace('\0', '').replace(":", "_") + ) ) fname = "%s_%s" % ( timezone.now().strftime('%Y-%m-%d-%H_%M'), diff --git a/seminar/models.py b/seminar/models.py index 15367d3a..4c8fc3f0 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -12,15 +12,10 @@ from django.utils.text import slugify from django.core.urlresolvers import reverse from django.core.cache import cache from django.core.exceptions import ObjectDoesNotExist +from django.utils.text import get_valid_filename from imagekit.models import ImageSpecField, ProcessedImageField from imagekit.processors import ResizeToFit, Transpose -from PIL import Image -import os -#from functools import partial -from cStringIO import StringIO -from django.core.files.base import ContentFile - from django_countries.fields import CountryField from solo.models import SingletonModel from taggit.managers import TaggableManager @@ -29,6 +24,8 @@ from reversion import revisions as reversion from seminar.utils import roman +from unidecode import unidecode + class SeminarModelBase(models.Model): @@ -557,28 +554,35 @@ class Reseni(SeminarModelBase): super(Reseni, self).save(*args, **kwargs) -# PrilohaReseni method -# TODO vyresit partial, tak aby slo migrovat -#def generate_filename(self, filename, directory): -# Django 1.9 podporuje partial - -def generate_filename(self, filename): - clean = filename.replace('/','-').replace('\0', '') +def aux_generate_filename(self, filename): + """Pomocná funkce generující ošetřený název souboru v adresáři s datem""" + clean = get_valid_filename( + unidecode(filename.replace('/', '-').replace('\0', '')) + ) datedir = timezone.now().strftime('%Y-%m') fname = "%s_%s" % ( timezone.now().strftime('%Y-%m-%d-%H:%M'), clean) - return os.path.join(settings.SEMINAR_RESENI_DIR, datedir, fname) + return os.path.join(datedir, fname) + +# Django neumí jednoduše serializovat partial nebo třídu s __call__ +# (https://docs.djangoproject.com/en/1.8/topics/migrations/), +# neprojdou pak migrace. Takže rozlišení funkcí generujících názvy souboru +# podle adresáře řešíme takto. + def generate_filename_konfera(self, filename): - clean = filename.replace('/','-').replace('\0', '') - datedir = timezone.now().strftime('%Y-%m') - fname = "%s_%s" % ( - timezone.now().strftime('%Y-%m-%d-%H:%M'), - clean) - return os.path.join(settings.SEMINAR_KONFERY_DIR, datedir, fname) -# TODO vyresit partial tak, aby slo migrovat -# return os.path.join(directory, datedir, fname) + return os.path.join( + settings.SEMINAR_KONFERY_DIR, + aux_generate_filename(self, filename) + ) + + +def generate_filename(self, filename): + return os.path.join( + settings.SEMINAR_RESENI_DIR, + aux_generate_filename(self, filename) + ) @reversion.register(ignore_duplicate_revisions=True)