diff --git a/readthedocs/api/v3/tests/responses/projects-builds-detail.json b/readthedocs/api/v3/tests/responses/projects-builds-detail.json index b2f2af3b67c..7f3b319f6e9 100644 --- a/readthedocs/api/v3/tests/responses/projects-builds-detail.json +++ b/readthedocs/api/v3/tests/responses/projects-builds-detail.json @@ -13,7 +13,7 @@ "urls": { "build": "https://readthedocs.org/projects/project/builds/1/", "project": "https://readthedocs.org/projects/project/", - "version": "https://readthedocs.org/dashboard/project/version/v1.0/" + "version": "https://readthedocs.org/dashboard/project/version/v1.0/edit/" }, "project": "project", "state": { diff --git a/readthedocs/api/v3/tests/responses/projects-detail.json b/readthedocs/api/v3/tests/responses/projects-detail.json index 50182ccb802..65214fecfd7 100644 --- a/readthedocs/api/v3/tests/responses/projects-detail.json +++ b/readthedocs/api/v3/tests/responses/projects-detail.json @@ -29,7 +29,7 @@ "urls": { "build": "https://readthedocs.org/projects/project/builds/1/", "project": "https://readthedocs.org/projects/project/", - "version": "https://readthedocs.org/dashboard/project/version/v1.0/" + "version": "https://readthedocs.org/dashboard/project/version/v1.0/edit/" }, "project": "project", "state": { diff --git a/readthedocs/api/v3/tests/responses/projects-versions-builds-list_POST.json b/readthedocs/api/v3/tests/responses/projects-versions-builds-list_POST.json index cccced2e13e..54801297d7f 100644 --- a/readthedocs/api/v3/tests/responses/projects-versions-builds-list_POST.json +++ b/readthedocs/api/v3/tests/responses/projects-versions-builds-list_POST.json @@ -14,7 +14,7 @@ "urls": { "build": "https://readthedocs.org/projects/project/builds/2/", "project": "https://readthedocs.org/projects/project/", - "version": "https://readthedocs.org/dashboard/project/version/v1.0/" + "version": "https://readthedocs.org/dashboard/project/version/v1.0/edit/" }, "project": "project", "state": { diff --git a/readthedocs/projects/urls/private.py b/readthedocs/projects/urls/private.py index 35a1b32cf55..deee3e399e4 100644 --- a/readthedocs/projects/urls/private.py +++ b/readthedocs/projects/urls/private.py @@ -1,5 +1,6 @@ """Project URLs for authenticated users.""" +from django.conf import settings from django.conf.urls import url from django.contrib.auth.decorators import login_required from django.views.generic.base import RedirectView @@ -39,6 +40,7 @@ ProjectUsersCreateList, ProjectUsersDelete, ProjectVersionDeleteHTML, + ProjectVersionCreate, ProjectVersionDetail, RegexAutomationRuleCreate, RegexAutomationRuleUpdate, @@ -81,7 +83,7 @@ name='project_version_delete_html', ), url( - r'^(?P[-\w]+)/version/(?P[^/]+)/$', + r'^(?P[-\w]+)/version/(?P[^/]+)/edit/$', ProjectVersionDetail.as_view(), name='project_version_detail', ), @@ -145,6 +147,18 @@ ), ] +# TODO move this up to the list above when it's not a conditional URL. +# Currently, this is only used by the new theme, we don't allow for "create" in +# our current templates. +if settings.RTD_EXT_THEME_ENABLED: + urlpatterns.append( + url( + r'^(?P[-\w]+)/version/create/$', + ProjectVersionCreate.as_view(), + name='project_version_create', + ), + ) + domain_urls = [ url( r'^(?P[-\w]+)/domains/$', diff --git a/readthedocs/projects/views/private.py b/readthedocs/projects/views/private.py index 94c65c4a369..3eb04e0d827 100644 --- a/readthedocs/projects/views/private.py +++ b/readthedocs/projects/views/private.py @@ -191,9 +191,7 @@ def get_success_url(self): ) -class ProjectVersionDetail(ProjectVersionMixin, UpdateView): - - template_name = 'projects/project_version_detail.html' +class ProjectVersionEditMixin(ProjectVersionMixin): def get_queryset(self): return Version.internal.public( @@ -221,6 +219,16 @@ def form_valid(self, form): return HttpResponseRedirect(self.get_success_url()) +class ProjectVersionCreate(ProjectVersionEditMixin, CreateView): + + template_name = 'projects/project_version_detail.html' + + +class ProjectVersionDetail(ProjectVersionEditMixin, UpdateView): + + template_name = 'projects/project_version_detail.html' + + class ProjectVersionDeleteHTML(ProjectVersionMixin, GenericModelView): http_method_names = ['post'] diff --git a/readthedocs/rtd_tests/tests/test_views.py b/readthedocs/rtd_tests/tests/test_views.py index ed60e2fd31b..6085c2a5b51 100644 --- a/readthedocs/rtd_tests/tests/test_views.py +++ b/readthedocs/rtd_tests/tests/test_views.py @@ -100,7 +100,7 @@ def test_version_delete_html(self): self.assertRedirectToLogin(response) def test_version_detail(self): - response = self.client.get('/dashboard/pip/version/0.8.1/') + response = self.client.get('/dashboard/pip/version/0.8.1/edit/') self.assertRedirectToLogin(response) def test_project_delete(self):