Skip to content

Commit 5cfe875

Browse files
committed
use our new fancy helper to clean up this signal
1 parent 71cc54f commit 5cfe875

File tree

1 file changed

+13
-21
lines changed

1 file changed

+13
-21
lines changed

apps/downloads/models.py

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from apps.cms.models import ContentManageable, NameSlugModel
1717
from apps.downloads.managers import ReleaseManager
1818
from apps.pages.models import Page
19-
from fastly.utils import purge_url
19+
from fastly.utils import purge_surrogate_key, purge_url
2020

2121
DEFAULT_MARKUP_TYPE = getattr(settings, "DEFAULT_MARKUP_TYPE", "markdown")
2222

@@ -288,38 +288,30 @@ def promote_latest_release(sender, instance, **kwargs):
288288

289289
@receiver(post_save, sender=Release)
290290
def purge_fastly_download_pages(sender, instance, **kwargs):
291-
"""Purge Fastly caches so new Downloads show up more quickly."""
291+
"""Purge Fastly caches so new Downloads show up more quickly.
292+
293+
Uses surrogate key purging to clear ALL pages under /downloads/ in one request,
294+
including dynamically added pages like /downloads/android/, /downloads/ios/, etc.
295+
Falls back to individual URL purges if surrogate key purging is not configured.
296+
"""
292297
# Don't purge on fixture loads
293298
if kwargs.get("raw", False):
294299
return
295300

296301
# Only purge on published instances
297302
if instance.is_published:
298-
# Purge our common pages
299-
purge_url("/downloads/")
300-
purge_url("/downloads/feed.rss")
301-
purge_url("/downloads/latest/python2/")
302-
purge_url("/downloads/latest/python3/")
303-
# Purge minor version specific URLs (like /downloads/latest/python3.14/)
304-
version = instance.get_version()
305-
if instance.version == Release.PYTHON3 and version:
306-
match = re.match(r"^3\.(\d+)", version)
307-
if match:
308-
purge_url(f"/downloads/latest/python3.{match.group(1)}/")
309-
purge_url("/downloads/latest/prerelease/")
310-
purge_url("/downloads/latest/pymanager/")
311-
purge_url("/downloads/macos/")
312-
purge_url("/downloads/source/")
313-
purge_url("/downloads/windows/")
303+
# Purge all /downloads/* pages via surrogate key (preferred method)
304+
# This catches everything: /downloads/android/, /downloads/release/*, etc.
305+
purge_surrogate_key("downloads")
306+
307+
# Also purge related pages outside /downloads/
314308
purge_url("/ftp/python/")
315309
if instance.get_version():
316310
purge_url(f"/ftp/python/{instance.get_version()}/")
317-
# See issue #584 for details
311+
# See issue #584 for details - these are under /box/, not /downloads/
318312
purge_url("/box/supernav-python-downloads/")
319313
purge_url("/box/homepage-downloads/")
320314
purge_url("/box/download-sources/")
321-
# Purge the release page itself
322-
purge_url(instance.get_absolute_url())
323315

324316

325317
@receiver(post_save, sender=Release)

0 commit comments

Comments
 (0)