fix unicode handling
[redakcja.git] / apps / fileupload / views.py
index 9425515..a2025fe 100644 (file)
@@ -4,6 +4,7 @@ from urllib import quote
 from django.conf import settings
 from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, Http404
 from django.utils.decorators import method_decorator
+from django.utils.encoding import smart_bytes
 from django.views.decorators.vary import vary_on_headers
 from django.views.generic import FormView, View
 from .forms import UploadForm
@@ -19,7 +20,7 @@ else:
     def thumbnail(relpath):
         try:
             return default.backend.get_thumbnail(relpath, "x50").url
-        except IOError:
+        except (IOError, ValueError):
             # That's not an image. No thumb.
             return None
 
@@ -74,9 +75,10 @@ class UploadView(FormView):
         Makes sure it's inside MEDIA_ROOT.
         
         """
+        filename = smart_bytes(filename)
         path = os.path.abspath(os.path.join(
                 settings.MEDIA_ROOT,
-                self.get_directory(),
+                smart_bytes(self.get_directory()),
                 filename))
         if not path.startswith(settings.MEDIA_ROOT):
             raise Http404
@@ -99,7 +101,7 @@ class UploadView(FormView):
             files = []
             path = self.get_safe_path()
             if os.path.isdir(path):
-                for f in os.listdir(path):
+                for f in sorted(os.listdir(path)):
                     file_info = {
                         "name": f,
                     }
@@ -137,7 +139,7 @@ class UploadView(FormView):
                 'url': self.get_url(f.name),
                 'thumbnail_url': thumbnail(self.get_directory() + f.name),
                         'delete_url': "%s?file=%s" % (
-                            request.get_full_path(),
+                            self.request.get_full_path(),
                             quote(f.name.encode('utf-8'))),
                 'delete_type': "DELETE"
             })