Current series view is missing a POST call, avoiding users to update or edit patch status or bundles.
This change adds POST call to series view, including the target patch id, which is taken from request context. [YOCTO #10973] Signed-off-by: Jose Lamego <jose.a.lam...@linux.intel.com> --- patchwork/views/series.py | 83 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 2 deletions(-) diff --git a/patchwork/views/series.py b/patchwork/views/series.py index 1c14074..5fe8a74 100644 --- a/patchwork/views/series.py +++ b/patchwork/views/series.py @@ -18,9 +18,13 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from django.conf import settings -from django.shortcuts import render, get_object_or_404, get_list_or_404 +from django.shortcuts import render, render_to_response +from django.shortcuts import get_object_or_404, get_list_or_404 from django.views.generic import View -from patchwork.models import Project, Series, SeriesRevision, TestResult +from patchwork.models import Patch, Project, Bundle, +from patchwork.models import Series, SeriesRevision, TestResult +from patchwork.requestcontext import PatchworkRequestContext +from patchwork.forms import PatchForm, CreateBundleForm class SeriesListView(View): @@ -53,3 +57,78 @@ class SeriesView(View): 'cover_letter': revision.cover_letter, 'revisions': revisions, }) + + def post(self, request, *args, **kwargs): + init_data = request.POST + pa_id = init_data.get('patch', None) + curr_rev = init_data.get('rev', None) + patch = get_object_or_404(Patch, id=pa_id) + series = get_object_or_404(Series, pk=kwargs['series']) + context = PatchworkRequestContext(request) + context.project = patch.project + editable = patch.is_editable(request.user) + + revisions = get_list_or_404(SeriesRevision, series=series) + for revision in revisions: + revision.patch_list = revision.ordered_patches().\ + select_related('state', 'submitter') + revision.test_results = TestResult.objects \ + .filter(revision=revision, patch=None) \ + .order_by('test__name').select_related('test') + + form = None + createbundleform = None + + if editable: + form = PatchForm(instance=patch) + if request.user.is_authenticated(): + createbundleform = CreateBundleForm() + + if request.method == 'POST': + action = request.POST.get('action', None) + if action: + action = action.lower() + + if action == 'createbundle': + bundle = Bundle(owner=request.user, project=patch.project) + createbundleform = CreateBundleForm(instance=bundle, + data=request.POST) + if createbundleform.is_valid(): + createbundleform.save() + bundle.append_patch(patch) + bundle.save() + createbundleform = CreateBundleForm() + context.add_message('Bundle %s created' % bundle.name) + + elif action == 'addtobundle': + bundle = get_object_or_404( + Bundle, id=request.POST.get('bundle_id')) + try: + bundle.append_patch(patch) + bundle.save() + context.add_message('Patch added to bundle "%s"' % + bundle.name) + except Exception as ex: + context.add_message("Couldn't add patch '%s' to bundle %s:\ + %s" % (patch.name, bundle.name, ex.message)) + + # all other actions require edit privs + elif not editable: + return HttpResponseForbidden() + + elif action is None: + form = PatchForm(data=request.POST, instance=patch) + if form.is_valid(): + form.save() + context.add_message('Patch ID: %s updated' % patch.pk) + + context['series'] = series + context['patchform'] = form + context['createbundleform'] = createbundleform + context['project'] = patch.project + context['revisions'] = revisions + context['test_results'] = TestResult.objects \ + .filter(revision=None, patch=patch) \ + .order_by('test__name').select_related('test') + + return render_to_response('patchwork/series.html', context) -- 1.9.1 -- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto