28
28
DeleteView ,
29
29
DetailView ,
30
30
FormView ,
31
+ GenericModelView ,
31
32
GenericView ,
32
33
UpdateView ,
33
34
)
75
76
76
77
from ..tasks import retry_domain_verification
77
78
78
-
79
79
log = logging .getLogger (__name__ )
80
80
81
81
@@ -167,25 +167,38 @@ def get_success_url(self):
167
167
return reverse ('projects_dashboard' )
168
168
169
169
170
- @login_required
171
- def project_version_detail (request , project_slug , version_slug ):
172
- """Project version detail page."""
173
- project = get_object_or_404 (
174
- Project .objects .for_admin_user (request .user ),
175
- slug = project_slug ,
176
- )
177
- version = get_object_or_404 (
178
- Version .internal .public (
179
- user = request .user ,
180
- project = project ,
170
+ class ProjectVersionMixin (ProjectAdminMixin , PrivateViewMixin ):
171
+
172
+ model = Version
173
+ context_object_name = 'version'
174
+ form_class = VersionForm
175
+ lookup_url_kwarg = 'version_slug'
176
+ lookup_field = 'slug'
177
+
178
+ def get_success_url (self ):
179
+ return reverse (
180
+ 'project_version_list' ,
181
+ kwargs = {'project_slug' : self .get_project ().slug },
182
+ )
183
+
184
+
185
+ class ProjectVersionDetail (ProjectVersionMixin , UpdateView ):
186
+
187
+ template_name = 'projects/project_version_detail.html'
188
+
189
+ def get_queryset (self ):
190
+ return Version .internal .public (
191
+ user = self .request .user ,
192
+ project = self .get_project (),
181
193
only_active = False ,
182
- ),
183
- slug = version_slug ,
184
- )
194
+ )
185
195
186
- form = VersionForm (request .POST or None , instance = version )
196
+ def get_form (self , data = None , files = None , ** kwargs ):
197
+ # This overrides the method from `ProjectAdminMixin`,
198
+ # since we don't have a project.
199
+ return self .get_form_class ()(data , files , ** kwargs )
187
200
188
- if request . method == 'POST' and form . is_valid ( ):
201
+ def form_valid ( self , form ):
189
202
version = form .save ()
190
203
if form .has_changed ():
191
204
if 'active' in form .changed_data and version .active is False :
@@ -197,14 +210,31 @@ def project_version_detail(request, project_slug, version_slug):
197
210
)
198
211
version .built = False
199
212
version .save ()
200
- url = reverse ('project_version_list' , args = [project .slug ])
201
- return HttpResponseRedirect (url )
213
+ return HttpResponseRedirect (self .get_success_url ())
202
214
203
- return render (
204
- request ,
205
- 'projects/project_version_detail.html' ,
206
- {'form' : form , 'project' : project , 'version' : version },
207
- )
215
+
216
+ class ProjectVersionDeleteHTML (ProjectVersionMixin , GenericModelView ):
217
+
218
+ http_method_names = ['get' , 'post' ]
219
+
220
+ def get (self , request , * args , ** kwargs ):
221
+ version = self .get_object ()
222
+ if not version .active :
223
+ version .built = False
224
+ version .save ()
225
+ broadcast (
226
+ type = 'app' ,
227
+ task = tasks .remove_dirs ,
228
+ args = [version .get_artifact_paths ()],
229
+ )
230
+ else :
231
+ return HttpResponseBadRequest (
232
+ "Can't delete HTML for an active version." ,
233
+ )
234
+ return HttpResponseRedirect (self .get_success_url ())
235
+
236
+ def post (self , request , * args , ** kwargs ):
237
+ return self .get (request , * args , ** kwargs )
208
238
209
239
210
240
class ImportWizardView (
@@ -674,43 +704,6 @@ def post(self, request, *args, **kwargs):
674
704
return HttpResponseRedirect (self .get_success_url ())
675
705
676
706
677
- @login_required
678
- def project_version_delete_html (request , project_slug , version_slug ):
679
- """
680
- Project version 'delete' HTML.
681
-
682
- This marks a version as not built
683
- """
684
- project = get_object_or_404 (
685
- Project .objects .for_admin_user (request .user ),
686
- slug = project_slug ,
687
- )
688
- version = get_object_or_404 (
689
- Version .internal .public (
690
- user = request .user ,
691
- project = project ,
692
- only_active = False ,
693
- ),
694
- slug = version_slug ,
695
- )
696
-
697
- if not version .active :
698
- version .built = False
699
- version .save ()
700
- broadcast (
701
- type = 'app' ,
702
- task = tasks .remove_dirs ,
703
- args = [version .get_artifact_paths ()],
704
- )
705
- else :
706
- return HttpResponseBadRequest (
707
- "Can't delete HTML for an active version." ,
708
- )
709
- return HttpResponseRedirect (
710
- reverse ('project_version_list' , kwargs = {'project_slug' : project_slug }),
711
- )
712
-
713
-
714
707
class DomainMixin (ProjectAdminMixin , PrivateViewMixin ):
715
708
model = Domain
716
709
form_class = DomainForm
0 commit comments