X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/717c14c014e3c988bcb392599a47ffa92630da78..198be737937aec7259e81ba791bf7f4e401795eb:/apps/filebrowser/base.py diff --git a/apps/filebrowser/base.py b/apps/filebrowser/base.py index e72b9ff0..4f0a024e 100644 --- a/apps/filebrowser/base.py +++ b/apps/filebrowser/base.py @@ -1,8 +1,12 @@ # coding: utf-8 +import locale + import os, re, datetime from time import gmtime, strftime from django.conf import settings +from django.utils.encoding import smart_unicode +import urllib # filebrowser imports from filebrowser.fb_settings import * @@ -16,7 +20,12 @@ else: from PIL import Image except ImportError: import Image - + + +def filesystem_encoding(ucode): + ucode = ucode.encode('utf-8') + ucode = urllib.quote(ucode) + return ucode class FileObject(object): """ @@ -24,14 +33,14 @@ class FileObject(object): PATH has to be relative to MEDIA_ROOT. """ - + def __init__(self, path): self.path = path self.head = os.path.split(path)[0] self.filename = os.path.split(path)[1] self.filename_lower = self.filename.lower() # important for sorting self.filetype = _get_file_type(self.filename) - + def _filesize(self): """ Filesize. @@ -40,30 +49,31 @@ class FileObject(object): return os.path.getsize(os.path.join(MEDIA_ROOT, self.path)) return "" filesize = property(_filesize) - + def _date(self): """ Date. """ if os.path.isfile(os.path.join(MEDIA_ROOT, self.path)) or os.path.isdir(os.path.join(MEDIA_ROOT, self.path)): return os.path.getmtime(os.path.join(MEDIA_ROOT, self.path)) - return "" + # IMHO this should raise an exception + return None date = property(_date) - + def _datetime(self): """ Datetime Object. """ return datetime.datetime.fromtimestamp(self.date) datetime = property(_datetime) - + def _extension(self): """ Extension. """ return u"%s" % os.path.splitext(self.filename)[1] extension = property(_extension) - + def _filetype_checked(self): if self.filetype == "Folder" and os.path.isdir(self.path_full): return self.filetype @@ -72,18 +82,18 @@ class FileObject(object): else: return "" filetype_checked = property(_filetype_checked) - + def _path_full(self): """ Full server PATH including MEDIA_ROOT. """ return u"%s" % os.path.join(MEDIA_ROOT, self.path) path_full = property(_path_full) - + def _path_relative(self): return self.path path_relative = property(_path_relative) - + def _path_relative_directory(self): """ Path relative to initial directory. @@ -92,18 +102,19 @@ class FileObject(object): value = directory_re.sub('', self.path) return u"%s" % value path_relative_directory = property(_path_relative_directory) - + def _url_relative(self): return self.path url_relative = property(_url_relative) - + def _url_full(self): """ Full URL including MEDIA_URL. """ - return u"%s" % _url_join(MEDIA_URL, self.path) + return filesystem_encoding(u"%s" % _url_join(MEDIA_URL, self.path)) + url_full = property(_url_full) - + def _url_save(self): """ URL used for the filebrowsefield. @@ -111,27 +122,27 @@ class FileObject(object): if SAVE_FULL_URL: return self.url_full else: - return self.path + return filesystem_encoding(self.path) url_save = property(_url_save) - + def _url_thumbnail(self): """ Thumbnail URL. """ if self.filetype == "Image": - return u"%s" % _url_join(MEDIA_URL, _get_version_path(self.path, 'fb_thumb')) + return filesystem_encoding(u"%s" % _url_join(MEDIA_URL, _get_version_path(self.path, u'fb_thumb'))) else: return "" url_thumbnail = property(_url_thumbnail) - + def url_admin(self): if self.filetype_checked == "Folder": directory_re = re.compile(r'^(%s)' % (DIRECTORY)) value = directory_re.sub('', self.path) - return u"%s" % value + return filesystem_encoding(u"%s" % value) else: - return u"%s" % _url_join(MEDIA_URL, self.path) - + return filesystem_encoding(u"%s" % _url_join(MEDIA_URL, self.path)) + def _dimensions(self): """ Image Dimensions. @@ -145,21 +156,21 @@ class FileObject(object): else: return False dimensions = property(_dimensions) - + def _width(self): """ Image Width. """ return self.dimensions[0] width = property(_width) - + def _height(self): """ Image Height. """ return self.dimensions[1] height = property(_height) - + def _orientation(self): """ Image Orientation. @@ -172,7 +183,7 @@ class FileObject(object): else: return None orientation = property(_orientation) - + def _is_empty(self): """ True if Folder is empty, False if not. @@ -185,15 +196,15 @@ class FileObject(object): else: return None is_empty = property(_is_empty) - + def __repr__(self): return u"%s" % self.url_save - + def __str__(self): return u"%s" % self.url_save - + def __unicode__(self): return u"%s" % self.url_save - +