From e70b670283d3b768b5f73fcef46e7549c59d84b7 Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Fri, 19 Jul 2013 17:04:01 +0200 Subject: [PATCH] Ability to add new patches --- pgcommitfest/commitfest/ajax.py | 13 +++++++++---- pgcommitfest/commitfest/models.py | 2 +- pgcommitfest/commitfest/views.py | 20 ++++++++++++++++++-- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/pgcommitfest/commitfest/ajax.py b/pgcommitfest/commitfest/ajax.py index b9c3db4..7c73771 100644 --- a/pgcommitfest/commitfest/ajax.py +++ b/pgcommitfest/commitfest/ajax.py @@ -74,14 +74,19 @@ def attachThread(request): patch = get_object_or_404(Patch, pk=int(request.POST['p']), commitfests=cf) msgid = request.POST['msg'] - + if doAttachThread(cf, patch, msgid, request.user): + return 'OK' + else: + raise Exception("Something happened that cannot happen") + +def doAttachThread(cf, patch, msgid, user): r = sorted(_archivesAPI('/message-id.json/%s' % msgid), key=lambda x: x['date']) # We have the full thread metadata - using the first and last entry, # construct a new mailthread in our own model. # First, though, check if it's already there. if MailThread.objects.filter(messageid=r[0]['msgid'], patch=patch).exists(): # It already existed. Pretend everything is fine. - return 'OK' + return True # Now create a new mailthread entry m = MailThread(messageid=r[0]['msgid'], @@ -96,11 +101,11 @@ def attachThread(request): ) m.save() parse_and_add_attachments(r, m) - PatchHistory(patch=patch, by=request.user, what='Attached mail thread %s' % r[0]['msgid']).save() + PatchHistory(patch=patch, by=user, what='Attached mail thread %s' % r[0]['msgid']).save() patch.set_modified() patch.save() - return 'OK' + return True @transaction.commit_on_success def detachThread(request): diff --git a/pgcommitfest/commitfest/models.py b/pgcommitfest/commitfest/models.py index c8a1137..145efab 100644 --- a/pgcommitfest/commitfest/models.py +++ b/pgcommitfest/commitfest/models.py @@ -94,7 +94,7 @@ class Patch(models.Model): # current timestamp. if not newmod: newmod = datetime.now() - if newmod > self.modified: + if not self.modified or newmod > self.modified: self.modified = newmod def __unicode__(self): diff --git a/pgcommitfest/commitfest/views.py b/pgcommitfest/commitfest/views.py index 95ac285..1701028 100644 --- a/pgcommitfest/commitfest/views.py +++ b/pgcommitfest/commitfest/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render_to_response, get_object_or_404 -from django.http import HttpResponseRedirect +from django.http import HttpResponseRedirect, Http404 from django.template import RequestContext from django.db import transaction from django.contrib import messages @@ -13,6 +13,7 @@ from mailqueue.util import send_mail from models import CommitFest, Patch, PatchOnCommitFest, PatchHistory, Committer from forms import PatchForm, NewPatchForm, CommentForm +from ajax import doAttachThread def home(request): commitfests = CommitFest.objects.all() @@ -99,7 +100,22 @@ def newpatch(request, cfid): if request.method == 'POST': form = NewPatchForm(data=request.POST) if form.is_valid(): - raise Exception("Do something") + patch = Patch(name=form.cleaned_data['name'], + topic=form.cleaned_data['topic']) + patch.set_modified() + patch.save() + poc = PatchOnCommitFest(patch=patch, commitfest=cf, enterdate=datetime.now()) + poc.save() + # Now add the thread + try: + doAttachThread(cf, patch, form.cleaned_data['threadmsgid'], request.user) + return HttpResponseRedirect("/%s/%s/" % (cf.id, patch.id)) + except Http404: + # Thread not found! + # This is a horrible breakage of API layers + form._errors['threadmsgid'] = form.error_class(('Selected thread did not exist',)) + except Exception: + form._errors['threadmsgid'] = form.error_class(('An error occurred looking up the thread in the archives.',)) else: form = NewPatchForm() -- 2.30.2