6
6
from django .contrib .auth .models import User
7
7
from django .contrib import messages
8
8
from django .core .urlresolvers import reverse
9
+ from django .conf import settings
9
10
from django .http import (HttpResponseRedirect , HttpResponseNotAllowed ,
10
11
Http404 , HttpResponseBadRequest )
11
12
from django .shortcuts import get_object_or_404 , render_to_response , render
32
33
from readthedocs .projects .models import Project , EmailHook , WebHook , Domain
33
34
from readthedocs .projects .views .base import ProjectAdminMixin
34
35
from readthedocs .projects import constants , tasks
35
- from readthedocs .projects .tasks import remove_path_from_web
36
+ from readthedocs .projects .tasks import remove_dir , clear_artifacts
36
37
37
38
from readthedocs .core .mixins import LoginRequiredMixin
38
39
from readthedocs .projects .signals import project_import
@@ -188,7 +189,13 @@ def project_version_detail(request, project_slug, version_slug):
188
189
form = VersionForm (request .POST or None , instance = version )
189
190
190
191
if request .method == 'POST' and form .is_valid ():
191
- form .save ()
192
+ version = form .save ()
193
+ if form .has_changed ():
194
+ if 'active' in form .changed_data and version .active is False :
195
+ log .info ('Removing files for version %s' % version .slug )
196
+ clear_artifacts .delay (version_pk = version .pk )
197
+ version .built = False
198
+ version .save ()
192
199
url = reverse ('project_version_list' , args = [project .slug ])
193
200
return HttpResponseRedirect (url )
194
201
@@ -210,8 +217,14 @@ def project_delete(request, project_slug):
210
217
slug = project_slug )
211
218
212
219
if request .method == 'POST' :
213
- # Remove the repository checkout
214
- remove_path_from_web .delay (path = project .doc_path )
220
+ # Support hacky "broadcast" with MULTIPLE_APP_SERVERS setting,
221
+ # otherwise put in normal celery queue
222
+ for server in getattr (settings , "MULTIPLE_APP_SERVERS" , ['celery' ]):
223
+ log .info ('Removing files on %s' % server )
224
+ remove_dir .apply_async (
225
+ args = [project .doc_path ],
226
+ queue = server ,
227
+ )
215
228
216
229
# Delete the project and everything related to it
217
230
project .delete ()
0 commit comments