Another unicode/path fix.
[redakcja.git] / apps / fileupload / views.py
index 9425515..e4baf02 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
@@ -41,7 +42,7 @@ class UploadView(FormView):
 
     def get_directory(self):
         """Directory relative to MEDIA_ROOT. Must end with a slash."""
-        return self.kwargs['path']
+        return self.kwargs['path'].encode('utf-8')
 
     def breadcrumbs(self):
         """List of tuples (name, url) or just (name,) for breadcrumbs.
@@ -74,6 +75,7 @@ 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(),
@@ -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"
             })