Skip to content

Commit 3fe6cb3

Browse files
committed
Trigger re-symlink for superproject when project changes
Re-symlink when: * a subproject is deleted * a subproject privacy level is changed * a subproject version privacy level is changed
1 parent 52546ab commit 3fe6cb3

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

readthedocs/projects/views/private.py

+36
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,16 @@ def get_queryset(self):
127127
def get_success_url(self):
128128
return reverse('projects_detail', args=[self.object.slug])
129129

130+
def form_valid(self, form):
131+
form.save()
132+
if form.has_changed():
133+
if 'privacy_level' in form.changed_data:
134+
log.info('Re-symlinking all superprojects due project privacy level has changed')
135+
for superproject in self.object.superprojects.all():
136+
broadcast(type='app', task=tasks.symlink_project, args=[superproject.pk])
137+
138+
return HttpResponseRedirect(self.get_success_url())
139+
130140

131141
@login_required
132142
def project_versions(request, project_slug):
@@ -148,6 +158,20 @@ def project_versions(request, project_slug):
148158

149159
if request.method == 'POST' and form.is_valid():
150160
form.save()
161+
162+
if form.has_changed():
163+
resymlink_superprojects = False
164+
# Each field is form as ``privacy-{{version.slug}}``
165+
for changed_data in form.changed_data:
166+
if changed_data.startswith('privacy-'):
167+
resymlink_superprojects = True
168+
break
169+
170+
if resymlink_superprojects:
171+
log.info('Re-symlinking all superprojects due version privacy level has changed')
172+
for superproject in project.superprojects.all():
173+
broadcast(type='app', task=tasks.symlink_project, args=[superproject.pk])
174+
151175
messages.success(request, _('Project versions updated'))
152176
project_dashboard = reverse('projects_detail', args=[project.slug])
153177
return HttpResponseRedirect(project_dashboard)
@@ -178,6 +202,13 @@ def project_version_detail(request, project_slug, version_slug):
178202
type='app', task=tasks.clear_artifacts, args=[version.pk])
179203
version.built = False
180204
version.save()
205+
206+
if 'privacy_level' in form.changed_data:
207+
log.info('Re-symlinking all superprojects due version privacy level has changed')
208+
for superproject in project.superprojects.all():
209+
broadcast(type='app', task=tasks.symlink_project, args=[superproject.pk])
210+
211+
181212
url = reverse('project_version_list', args=[project.slug])
182213
return HttpResponseRedirect(url)
183214

@@ -200,6 +231,11 @@ def project_delete(request, project_slug):
200231
if request.method == 'POST':
201232
broadcast(type='app', task=tasks.remove_dir, args=[project.doc_path])
202233
project.delete()
234+
235+
log.info('Re-symlinking all superprojects due project deletion')
236+
for superproject in project.superprojects.all():
237+
broadcast(type='app', task=tasks.symlink_project, args=[superproject.pk])
238+
203239
messages.success(request, _('Project deleted'))
204240
project_dashboard = reverse('projects_dashboard')
205241
return HttpResponseRedirect(project_dashboard)

0 commit comments

Comments
 (0)