[extensions-web/django/upgrade-1.8] django: upgrade to latest 1.8 LTS. Bump django modules to latest versions.



commit c43f339b92f088f44fae3fb7db5389a90b538a4f
Author: Yuri Konotopov <ykonotopov gnome org>
Date:   Wed Oct 26 00:31:17 2016 +0300

    django: upgrade to latest 1.8 LTS. Bump django modules to latest versions.
    
    Reworked extensions.views.create_version to use transaction.atomic

 requirements.txt               |    6 ++--
 sweettooth/exceptions.py       |    7 ++++
 sweettooth/extensions/views.py |   77 +++++++++++++++++++---------------------
 3 files changed, 47 insertions(+), 43 deletions(-)
---
diff --git a/requirements.txt b/requirements.txt
index 214d1db..b15a19c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,7 +1,7 @@
-Django==1.7.11
-django-autoslug==1.7.2
+Django==1.8.15
+django-autoslug==1.9.3
 django-contrib-comments==1.7.3
-django-registration==2.0
+django-registration==2.1.2
 Pygments==1.6
 wsgiref==0.1.2
 sorl-thumbnail
diff --git a/sweettooth/exceptions.py b/sweettooth/exceptions.py
new file mode 100644
index 0000000..9ab5286
--- /dev/null
+++ b/sweettooth/exceptions.py
@@ -0,0 +1,7 @@
+from django.db import DatabaseError
+
+
+class DatabaseErrorWithMessages(DatabaseError):
+    def __init__(self, messages = None):
+        super(DatabaseErrorWithMessages, self).__init__()
+        self.messages = messages if messages is not None else []
diff --git a/sweettooth/extensions/views.py b/sweettooth/extensions/views.py
index cac83f2..2f90a84 100644
--- a/sweettooth/extensions/views.py
+++ b/sweettooth/extensions/views.py
@@ -13,6 +13,7 @@ from django.shortcuts import get_object_or_404, redirect, render
 from django.template.loader import render_to_string
 from django.views.decorators.http import require_POST
 
+from sweettooth.exceptions import DatabaseErrorWithMessages
 from sweettooth.extensions import models, search
 from sweettooth.extensions.forms import UploadForm
 
@@ -366,48 +367,44 @@ def ajax_set_status_view(request, newstatus):
     return dict(svm=json.dumps(extension.visible_shell_version_map),
                 mvs=render_to_string('extensions/multiversion_status.html', context))
 
+
 def create_version(request, file_source):
-    transaction.set_autocommit(False)
     try:
-        try:
-            metadata = models.parse_zipfile_metadata(file_source)
-            uuid = metadata['uuid']
-        except (models.InvalidExtensionData, KeyError), e:
-            messages.error(request, "Invalid extension data: %s" % (e.message,))
-            transaction.rollback()
-            return None, []
-
-        try:
-            extension = models.Extension.objects.get(uuid=uuid)
-        except models.Extension.DoesNotExist:
-            extension = models.Extension(creator=request.user)
-        else:
-            if request.user != extension.creator and not request.user.is_superuser:
-                messages.error(request, "An extension with that UUID has already been added.")
-                transaction.rollback()
-                return None, []
-
-        extension.parse_metadata_json(metadata)
-        extension.save()
-
-        try:
-            extension.full_clean()
-        except ValidationError, e:
-            transaction.rollback()
-            return None, e.messages
-
-        version = models.ExtensionVersion.objects.create(extension=extension,
-                                                         source=file_source,
-                                                         status=models.STATUS_UNREVIEWED)
-        version.parse_metadata_json(metadata)
-        version.replace_metadata_json()
-        version.save()
-
-        transaction.commit()
-    finally:
-        transaction.set_autocommit(True)
-
-    return version, []
+        with transaction.atomic():
+            try:
+                metadata = models.parse_zipfile_metadata(file_source)
+                uuid = metadata['uuid']
+            except (models.InvalidExtensionData, KeyError), e:
+                messages.error(request, "Invalid extension data: %s" % (e.message,))
+                raise DatabaseErrorWithMessages
+
+            try:
+                extension = models.Extension.objects.get(uuid=uuid)
+            except models.Extension.DoesNotExist:
+                extension = models.Extension(creator=request.user)
+            else:
+                if request.user != extension.creator and not request.user.is_superuser:
+                    messages.error(request, "An extension with that UUID has already been added.")
+                    raise DatabaseErrorWithMessages
+
+            extension.parse_metadata_json(metadata)
+            extension.save()
+
+            try:
+                extension.full_clean()
+            except ValidationError, e:
+                raise DatabaseErrorWithMessages(e.messages)
+
+            version = models.ExtensionVersion.objects.create(extension=extension,
+                                                             source=file_source,
+                                                             status=models.STATUS_UNREVIEWED)
+            version.parse_metadata_json(metadata)
+            version.replace_metadata_json()
+            version.save()
+
+            return version, []
+    except DatabaseErrorWithMessages, e:
+        return None, e.messages
 
 @login_required
 def upload_file(request):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]