Skip to content

Commit 4c24100

Browse files
authored
Breaking up #12495 into multiple stages of work. (#12503)
1 parent 2742aa0 commit 4c24100

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

readthedocs/projects/views/public.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from django.views.generic import ListView
2424
from taggit.models import Tag
2525

26+
from readthedocs.api.mixins import CDNCacheTagsMixin
2627
from readthedocs.builds.constants import BUILD_STATE_FINISHED
2728
from readthedocs.builds.constants import EXTERNAL
2829
from readthedocs.builds.constants import INTERNAL
@@ -299,7 +300,7 @@ def verify_project_token(cls, token, project_slug):
299300
project_badge = never_cache(ProjectBadgeView.as_view())
300301

301302

302-
class ProjectDownloadMediaBase(CDNCacheControlMixin, ServeDocsMixin, View):
303+
class ProjectDownloadMediaBase(CDNCacheControlMixin, CDNCacheTagsMixin, ServeDocsMixin, View):
303304
# Use new-style URLs (same domain as docs) or old-style URLs (dashboard URL)
304305
same_domain_url = False
305306

@@ -382,13 +383,28 @@ def get(
382383
slug=version_slug,
383384
)
384385

386+
# TODO don't do this, it's a leftover of trying to use CDNCacheTagsMixin
387+
# without class level variables. See proxito.views.serve for
388+
# other instances of this pattern to update.
389+
# See: https://github.com/readthedocs/readthedocs.org/pull/12495
390+
self.project = version.project
391+
self.version = version
392+
385393
return self._serve_dowload(
386394
request=request,
387395
project=version.project,
388396
version=version,
389397
type_=type_,
390398
)
391399

400+
def _get_project(self):
401+
"""Hack for CDNCacheTagsMixin, get project set in `get()`."""
402+
return self.project
403+
404+
def _get_version(self):
405+
"""Hack for CDNCacheTagsMixin, get version set in `get()`."""
406+
return self.version
407+
392408

393409
class ProjectDownloadMedia(SettingsOverrideObject):
394410
_default_class = ProjectDownloadMediaBase

readthedocs/proxito/tests/test_full.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ def test_download_files_public_version(self):
547547
headers={"host": "project.dev.readthedocs.io"},
548548
)
549549
self.assertEqual(resp.status_code, 200)
550+
self.assertEqual(resp["Cache-Tag"], "project,project:latest")
550551
extension = "zip" if type_ == MEDIA_TYPE_HTMLZIP else type_
551552
self.assertEqual(
552553
resp["X-Accel-Redirect"],
@@ -560,6 +561,7 @@ def test_download_files_public_version(self):
560561
headers={"host": "project.dev.readthedocs.io"},
561562
)
562563
self.assertEqual(resp.status_code, 200)
564+
self.assertEqual(resp["Cache-Tag"], "translation,translation:latest")
563565
extension = "zip" if type_ == MEDIA_TYPE_HTMLZIP else type_
564566
self.assertEqual(
565567
resp["X-Accel-Redirect"],
@@ -604,6 +606,7 @@ def test_download_files_private_version(self):
604606
headers={"host": "project.dev.readthedocs.io"},
605607
)
606608
self.assertEqual(resp.status_code, 200)
609+
self.assertEqual(resp["Cache-Tag"], "project,project:latest")
607610
extension = "zip" if type_ == MEDIA_TYPE_HTMLZIP else type_
608611
self.assertEqual(
609612
resp["X-Accel-Redirect"],

0 commit comments

Comments
 (0)