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'],
)
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):
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
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()
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()