Skip to content

Commit 27722ff

Browse files
authored
Merge pull request #4296 from rtfd/humitos/clearartifacts/use-paths
Use PATHs to call clear_artifacts
2 parents 08591ea + 8282885 commit 27722ff

File tree

4 files changed

+45
-45
lines changed

4 files changed

+45
-45
lines changed

readthedocs/builds/models.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def save(self, *args, **kwargs): # pylint: disable=arguments-differ
181181
def delete(self, *args, **kwargs): # pylint: disable=arguments-differ
182182
from readthedocs.projects import tasks
183183
log.info('Removing files for version %s', self.slug)
184-
broadcast(type='app', task=tasks.clear_artifacts, args=[self.pk])
184+
broadcast(type='app', task=tasks.clear_artifacts, args=[self.get_artifact_paths()])
185185
broadcast(
186186
type='app', task=tasks.symlink_project, args=[self.project.pk])
187187
super(Version, self).delete(*args, **kwargs)
@@ -237,6 +237,24 @@ def get_build_path(self):
237237
return path
238238
return None
239239

240+
def get_artifact_paths(self):
241+
"""
242+
Return a list of all production artifacts/media path for this version.
243+
244+
:rtype: list
245+
"""
246+
paths = []
247+
248+
for type_ in ('pdf', 'epub', 'htmlzip'):
249+
paths.append(
250+
self.project.get_production_media_path(
251+
type_=type_,
252+
version_slug=self.slug),
253+
)
254+
paths.append(self.project.rtd_build_path(version=self.slug))
255+
256+
return paths
257+
240258
def clean_build_path(self):
241259
"""
242260
Clean build path for project version.

readthedocs/projects/tasks.py

+22-40
Original file line numberDiff line numberDiff line change
@@ -764,10 +764,21 @@ def sync_files(project_pk, version_pk, hostname=None, html=False,
764764
synchronization of build artifacts on each application instance.
765765
"""
766766
# Clean up unused artifacts
767+
version = Version.objects.get(pk=version_pk)
767768
if not pdf:
768-
clear_pdf_artifacts(version_pk)
769+
remove_dir(
770+
version.project.get_production_media_path(
771+
type_='pdf',
772+
version_slug=version.slug,
773+
),
774+
)
769775
if not epub:
770-
clear_epub_artifacts(version_pk)
776+
remove_dir(
777+
version.project.get_production_media_path(
778+
type_='epub',
779+
version_slug=version.slug,
780+
),
781+
)
771782

772783
# Sync files to the web servers
773784
move_files(
@@ -777,7 +788,7 @@ def sync_files(project_pk, version_pk, hostname=None, html=False,
777788
localmedia=localmedia,
778789
search=search,
779790
pdf=pdf,
780-
epub=epub
791+
epub=epub,
781792
)
782793

783794
# Symlink project
@@ -1158,44 +1169,15 @@ def remove_dir(path):
11581169

11591170

11601171
@app.task()
1161-
def clear_artifacts(version_pk):
1162-
"""Remove artifacts from the web servers."""
1163-
version = Version.objects.get(pk=version_pk)
1164-
clear_pdf_artifacts(version)
1165-
clear_epub_artifacts(version)
1166-
clear_htmlzip_artifacts(version)
1167-
clear_html_artifacts(version)
1168-
1169-
1170-
@app.task()
1171-
def clear_pdf_artifacts(version):
1172-
if isinstance(version, int):
1173-
version = Version.objects.get(pk=version)
1174-
remove_dir(version.project.get_production_media_path(
1175-
type_='pdf', version_slug=version.slug))
1176-
1177-
1178-
@app.task()
1179-
def clear_epub_artifacts(version):
1180-
if isinstance(version, int):
1181-
version = Version.objects.get(pk=version)
1182-
remove_dir(version.project.get_production_media_path(
1183-
type_='epub', version_slug=version.slug))
1184-
1185-
1186-
@app.task()
1187-
def clear_htmlzip_artifacts(version):
1188-
if isinstance(version, int):
1189-
version = Version.objects.get(pk=version)
1190-
remove_dir(version.project.get_production_media_path(
1191-
type_='htmlzip', version_slug=version.slug))
1192-
1172+
def clear_artifacts(paths):
1173+
"""
1174+
Remove artifacts from the web servers.
11931175
1194-
@app.task()
1195-
def clear_html_artifacts(version):
1196-
if isinstance(version, int):
1197-
version = Version.objects.get(pk=version)
1198-
remove_dir(version.project.rtd_build_path(version=version.slug))
1176+
:param paths: list containing PATHs where production media is on disk
1177+
(usually ``Version.get_artifact_paths``)
1178+
"""
1179+
for path in paths:
1180+
remove_dir(path)
11991181

12001182

12011183
@app.task(queue='web')

readthedocs/projects/views/private.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ def project_version_detail(request, project_slug, version_slug):
157157
if 'active' in form.changed_data and version.active is False:
158158
log.info('Removing files for version %s', version.slug)
159159
broadcast(
160-
type='app', task=tasks.clear_artifacts, args=[version.pk])
160+
type='app', task=tasks.clear_artifacts, args=[version.get_artifact_paths()])
161161
version.built = False
162162
version.save()
163163
url = reverse('project_version_list', args=[project.slug])
@@ -649,7 +649,7 @@ def project_version_delete_html(request, project_slug, version_slug):
649649
if not version.active:
650650
version.built = False
651651
version.save()
652-
broadcast(type='app', task=tasks.clear_artifacts, args=[version.pk])
652+
broadcast(type='app', task=tasks.clear_artifacts, args=[version.get_artifact_paths()])
653653
else:
654654
return HttpResponseBadRequest(
655655
"Can't delete HTML for an active version.")

readthedocs/rtd_tests/tests/test_celery.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ def test_clear_artifacts(self):
6060
directory = self.project.get_production_media_path(type_='pdf', version_slug=version.slug)
6161
os.makedirs(directory)
6262
self.assertTrue(exists(directory))
63-
result = tasks.clear_artifacts.delay(version_pk=version.pk)
63+
result = tasks.clear_artifacts.delay(paths=version.get_artifact_paths())
6464
self.assertTrue(result.successful())
6565
self.assertFalse(exists(directory))
6666

6767
directory = version.project.rtd_build_path(version=version.slug)
6868
os.makedirs(directory)
6969
self.assertTrue(exists(directory))
70-
result = tasks.clear_artifacts.delay(version_pk=version.pk)
70+
result = tasks.clear_artifacts.delay(paths=version.get_artifact_paths())
7171
self.assertTrue(result.successful())
7272
self.assertFalse(exists(directory))
7373

0 commit comments

Comments
 (0)