fix rev check
[redakcja.git] / apps / wiki / views.py
index 1bc4061..7d60341 100644 (file)
@@ -17,6 +17,8 @@ from wiki.forms import DocumentTextSaveForm, DocumentTagForm, DocumentCreateForm
 from datetime import datetime
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext_lazy as _
+from django.utils.decorators import decorator_from_middleware
+from django.middleware.gzip import GZipMiddleware
 
 
 #
@@ -166,13 +168,18 @@ def upload(request):
                 elif title in existing:
                     error_list.append((filename, title, _('Title already used in repository.')))
                 else:
-                    ok_list.append((filename, title))
+                    try:
+                        zip.read(filename).decode('utf-8') # test read
+                        ok_list.append((filename, title))
+                    except UnicodeDecodeError:
+                        error_list.append((filename, title, _('File should be UTF-8 encoded.')))
                     titles[title] = filename
+
             if not error_list:
                 for filename, title in ok_list:
                     storage.create_document(
                         name=title,
-                        text=zip.read(filename)
+                        text=zip.read(filename).decode('utf-8')
                     )
 
             return direct_to_template(request, "wiki/document_upload.html", extra_context={
@@ -197,6 +204,7 @@ def upload(request):
 
 @never_cache
 @normalized_name
+@decorator_from_middleware(GZipMiddleware)
 def text(request, name):
     storage = getstorage()
 
@@ -313,6 +321,17 @@ def diff(request, name):
                                          docB.plain_text.splitlines(), context=3))
 
 
+@never_cache
+@normalized_name
+def revision(request, name):
+    storage = getstorage()
+
+    try:
+        return http.HttpResponse(str(storage.doc_meta(name)['revision']))
+    except DocumentNotFound:
+        raise http.Http404
+
+
 @never_cache
 @normalized_name
 def history(request, name):