From 8c509044dffd52fd643596184bcca1843bfdb318 Mon Sep 17 00:00:00 2001 From: Rahul Tiwari Date: Sat, 8 Sep 2018 13:15:23 +0530 Subject: [PATCH 1/3] Redirect to build detail post manual build --- readthedocs/builds/views.py | 49 +++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/readthedocs/builds/views.py b/readthedocs/builds/views.py index 473db6ac245..e02b707b511 100644 --- a/readthedocs/builds/views.py +++ b/readthedocs/builds/views.py @@ -1,26 +1,32 @@ +# -*- coding: utf-8 -*- """Views for builds app.""" -from __future__ import absolute_import -from builtins import object +from __future__ import ( + absolute_import, + division, + print_function, + unicode_literals, +) + import logging -from django.shortcuts import get_object_or_404 -from django.views.generic import ListView, DetailView +from builtins import object +from django.contrib.auth.decorators import login_required +from django.core.urlresolvers import reverse from django.http import ( HttpResponseForbidden, HttpResponsePermanentRedirect, HttpResponseRedirect, ) -from django.contrib.auth.decorators import login_required -from readthedocs.core.permissions import AdminPermission -from django.core.urlresolvers import reverse +from django.shortcuts import get_object_or_404 from django.utils.decorators import method_decorator +from django.views.generic import DetailView, ListView from readthedocs.builds.models import Build, Version +from readthedocs.core.permissions import AdminPermission from readthedocs.core.utils import trigger_build from readthedocs.projects.models import Project - log = logging.getLogger(__name__) @@ -31,9 +37,11 @@ def get_queryset(self): self.project_slug = self.kwargs.get('project_slug', None) self.project = get_object_or_404( Project.objects.protected(self.request.user), - slug=self.project_slug + slug=self.project_slug, + ) + queryset = Build.objects.public( + user=self.request.user, project=self.project ) - queryset = Build.objects.public(user=self.request.user, project=self.project) return queryset @@ -55,7 +63,10 @@ def post(self, request, project_slug): ) trigger_build(project=project, version=version) - return HttpResponseRedirect(reverse('builds_project_list', args=[project.slug])) + build_pk = project.builds.first().pk + return HttpResponseRedirect( + reverse('builds_detail', args=[project.slug, build_pk]) + ) class BuildList(BuildBase, BuildTriggerMixin, ListView): @@ -63,11 +74,14 @@ class BuildList(BuildBase, BuildTriggerMixin, ListView): def get_context_data(self, **kwargs): context = super(BuildList, self).get_context_data(**kwargs) - active_builds = self.get_queryset().exclude(state="finished").values('id') + active_builds = self.get_queryset().exclude(state='finished' + ).values('id') context['project'] = self.project context['active_builds'] = active_builds - context['versions'] = Version.objects.public(user=self.request.user, project=self.project) + context['versions'] = Version.objects.public( + user=self.request.user, project=self.project + ) context['build_qs'] = self.get_queryset() return context @@ -84,9 +98,14 @@ def get_context_data(self, **kwargs): # Old build view redirects + def builds_redirect_list(request, project_slug): # pylint: disable=unused-argument - return HttpResponsePermanentRedirect(reverse('builds_project_list', args=[project_slug])) + return HttpResponsePermanentRedirect( + reverse('builds_project_list', args=[project_slug]) + ) def builds_redirect_detail(request, project_slug, pk): # pylint: disable=unused-argument - return HttpResponsePermanentRedirect(reverse('builds_detail', args=[project_slug, pk])) + return HttpResponsePermanentRedirect( + reverse('builds_detail', args=[project_slug, pk]) + ) From 768779eb9daa362c8557262659b1b36b2d00c028 Mon Sep 17 00:00:00 2001 From: Rahul Tiwari Date: Mon, 1 Oct 2018 11:20:59 +0530 Subject: [PATCH 2/3] Return signature from trigger build and use it to fetch build_pk --- readthedocs/builds/views.py | 4 ++-- readthedocs/core/utils/__init__.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/readthedocs/builds/views.py b/readthedocs/builds/views.py index e02b707b511..8118d788d45 100644 --- a/readthedocs/builds/views.py +++ b/readthedocs/builds/views.py @@ -62,8 +62,8 @@ def post(self, request, project_slug): slug=version_slug, ) - trigger_build(project=project, version=version) - build_pk = project.builds.first().pk + signature = trigger_build(project=project, version=version)[1] + build_pk = signature.get('kwargs', {}).get('build_pk') return HttpResponseRedirect( reverse('builds_detail', args=[project.slug, build_pk]) ) diff --git a/readthedocs/core/utils/__init__.py b/readthedocs/core/utils/__init__.py index 82ab13dbf11..7ce94fe7063 100644 --- a/readthedocs/core/utils/__init__.py +++ b/readthedocs/core/utils/__init__.py @@ -172,7 +172,7 @@ def trigger_build(project, version=None, record=True, force=False): # Current project is skipped return None - return update_docs_task.apply_async() + return (update_docs_task.apply_async(), update_docs_task) def send_email(recipient, subject, template, template_html, context=None, From bdc332bcfa4ddb3f0a87116135a375ee64fbbc71 Mon Sep 17 00:00:00 2001 From: Rahul Tiwari Date: Mon, 1 Oct 2018 18:25:26 +0530 Subject: [PATCH 3/3] Update dosctring and fix yapf errors --- readthedocs/builds/views.py | 29 ++++++++--------------------- readthedocs/core/utils/__init__.py | 2 +- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/readthedocs/builds/views.py b/readthedocs/builds/views.py index 8118d788d45..c44578b2863 100644 --- a/readthedocs/builds/views.py +++ b/readthedocs/builds/views.py @@ -35,13 +35,8 @@ class BuildBase(object): def get_queryset(self): self.project_slug = self.kwargs.get('project_slug', None) - self.project = get_object_or_404( - Project.objects.protected(self.request.user), - slug=self.project_slug, - ) - queryset = Build.objects.public( - user=self.request.user, project=self.project - ) + self.project = get_object_or_404(Project.objects.protected(self.request.user),slug=self.project_slug,) + queryset = Build.objects.public(user=self.request.user, project=self.project) return queryset @@ -62,11 +57,10 @@ def post(self, request, project_slug): slug=version_slug, ) - signature = trigger_build(project=project, version=version)[1] + _, signature = trigger_build(project=project, version=version) build_pk = signature.get('kwargs', {}).get('build_pk') return HttpResponseRedirect( - reverse('builds_detail', args=[project.slug, build_pk]) - ) + reverse('builds_detail', args=[project.slug, build_pk])) class BuildList(BuildBase, BuildTriggerMixin, ListView): @@ -74,14 +68,11 @@ class BuildList(BuildBase, BuildTriggerMixin, ListView): def get_context_data(self, **kwargs): context = super(BuildList, self).get_context_data(**kwargs) - active_builds = self.get_queryset().exclude(state='finished' - ).values('id') + active_builds = self.get_queryset().exclude(state='finished').values('id') context['project'] = self.project context['active_builds'] = active_builds - context['versions'] = Version.objects.public( - user=self.request.user, project=self.project - ) + context['versions'] = Version.objects.public(user=self.request.user, project=self.project) context['build_qs'] = self.get_queryset() return context @@ -100,12 +91,8 @@ def get_context_data(self, **kwargs): def builds_redirect_list(request, project_slug): # pylint: disable=unused-argument - return HttpResponsePermanentRedirect( - reverse('builds_project_list', args=[project_slug]) - ) + return HttpResponsePermanentRedirect(reverse('builds_project_list', args=[project_slug])) def builds_redirect_detail(request, project_slug, pk): # pylint: disable=unused-argument - return HttpResponsePermanentRedirect( - reverse('builds_detail', args=[project_slug, pk]) - ) + return HttpResponsePermanentRedirect(reverse('builds_detail', args=[project_slug, pk])) diff --git a/readthedocs/core/utils/__init__.py b/readthedocs/core/utils/__init__.py index 7ce94fe7063..6b6e30b6d4c 100644 --- a/readthedocs/core/utils/__init__.py +++ b/readthedocs/core/utils/__init__.py @@ -158,7 +158,7 @@ def trigger_build(project, version=None, record=True, force=False): :param version: version of the project to be built. Default: ``latest`` :param record: whether or not record the build in a new Build object :param force: build the HTML documentation even if the files haven't changed - :returns: Celery AsyncResult promise + :returns: A tuple (Celery AsyncResult promise, Task Signature from ``prepare_build``) """ update_docs_task = prepare_build( project,