Commits

Alex Ulianytskyi committed 0fa1bf5

Новые функции cyrillic_to_latin, compact_dict

  • Participants
  • Parent commits 5fa3faa

Comments (0)

Files changed (2)

File django_utils/__init__.py

+# -*- coding: utf-8 -*-
 from django.db.models.fields import FieldDoesNotExist
+from django.utils.encoding import force_unicode
+from django.utils.text import get_valid_filename
 from django.utils.translation import ugettext_lazy as _
 
 def get_fields(obj):
         except FieldDoesNotExist:
             pass
     return res
+
+CYRILLIC_CHARS = {
+    u'а': u'a',
+    u'б': u'b',
+    u'в': u'v',
+    u'г': u'g',
+    u'д': u'd',
+    u'е': u'e',
+    u'ё': u'e',
+    u'ж': u'zh',
+    u'з': u'z',
+    u'и': u'i',
+    u'й': u'j',
+    u'к': u'k',
+    u'л': u'l',
+    u'м': u'm',
+    u'н': u'n',
+    u'о': u'o',
+    u'п': u'p',
+    u'р': u'r',
+    u'с': u's',
+    u'т': u't',
+    u'у': u'u',
+    u'ф': u'f',
+    u'х': u'h',
+    u'ц': u'c',
+    u'ч': u'ch',
+    u'ш': u'sh',
+    u'щ': u'sch',
+    u'ь': u"'",
+    u'ы': u'y',
+    u'ь': u"'",
+    u'э': u'e',
+    u'ю': u'ju',
+    u'я': u'ja',
+    u'А': u'A',
+    u'Б': u'B',
+    u'В': u'V',
+    u'Г': u'G',
+    u'Д': u'D',
+    u'Е': u'E',
+    u'Ё': u'E',
+    u'Ж': u'ZH',
+    u'З': u'Z',
+    u'И': u'I',
+    u'Й': u'J',
+    u'К': u'K',
+    u'Л': u'L',
+    u'М': u'M',
+    u'Н': u'N',
+    u'О': u'O',
+    u'П': u'P',
+    u'Р': u'R',
+    u'С': u'S',
+    u'Т': u'T',
+    u'У': u'U',
+    u'Ф': u'F',
+    u'Х': u'H',
+    u'Ц': u'C',
+    u'Ч': u'CH',
+    u'Ш': u'SH',
+    u'Щ': u'SCH',
+    u'Ъ': u"'",
+    u'Ы': u'Y',
+    u'Ь': u"'",
+    u'Э': u'E',
+    u'Ю': u'JU',
+    u'Я': u'JA',
+}
+def cyrillic_to_latin(text):
+    result = u''
+    for char in force_unicode(text):
+        if char in CYRILLIC_CHARS:
+            char = CYRILLIC_CHARS[char]
+        result += char
+    return result
+
+def normalize_filename(filename):
+    return get_valid_filename(cyrillic_to_latin(filename))
+
+def compact_dict(d):
+    for key, item in d.items():
+        if not item:
+            del d[key]
+    return d
+    

File django_utils/image_storage.py

 # -*- coding: utf-8 -*-
 import os
+
 from PIL import Image
 from django.conf import settings
 from django.core.files.storage import FileSystemStorage
+from django.utils.encoding import force_unicode
 
 class ImageStorage(FileSystemStorage):
     thumbnail_size = (100, 100)
 
     def _thumbnail(self, name, size, suffix=None):
         path = self.path(name)
-        thumbnail_name = path
+        if suffix:
+            self.thumbnail_suffix = suffix
+        thumbnail_path = self.thumbnail_path(name)
         img = Image.open(path)
         if img.size[0] < size[0] and img.size[1] < size[1]:
             return
-        _name, ext = os.path.splitext(path)
-        if suffix:
-            thumbnail_name = u'%s%s%s' % (_name, suffix, ext)
         img.thumbnail(size, Image.ANTIALIAS)
-        img.save(thumbnail_name)
-        return thumbnail_name
+        img.save(thumbnail_path)
+        return thumbnail_path
 
     def __init__(self, location, base_url, ** options):
         """
         super(ImageStorage, self).delete(self.thumbnail_name(name))
     def _format_thumnail_str(self, name, ext):
         if name:
-            return u'%s%s%s' % (name, self.thumbnail_suffix, ext)
+            return u'%s%s%s' % (force_unicode(name), force_unicode(self.thumbnail_suffix), force_unicode(ext))
         else:
             return u''
     def thumbnail_name(self, name):