[extensions-web/django/upgrade-1.8] django: upgrade to latest 1.8 LTS. Bump django modules to latest versions.
- From: Yuri Konotopov <ykonotopov src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [extensions-web/django/upgrade-1.8] django: upgrade to latest 1.8 LTS. Bump django modules to latest versions.
- Date: Tue, 25 Oct 2016 21:31:36 +0000 (UTC)
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]