diff options
| author | Magnus Hagander | 2026-08-11 09:48:08 +0000 |
|---|---|---|
| committer | Magnus Hagander | 2026-08-11 09:48:08 +0000 |
| commit | c8650e629e2063c423895d8a9ed2d6bf584ef980 (patch) | |
| tree | 932e57644de6d01e56ecb55493b0ae143fdc7e4d | |
| parent | 1db54294310c5eddef3e3bd114238079ea0da42b (diff) | |
We used a mix of xkey (for redirector) and bans (for main page).
Instead, add xkey tags to existing indexes (which is the main page and
the RSS feeds) as well as the feeds list, and do purges just on xkey.
This also means we can do fewer purges, since xkey can do more than one
at a time.
| -rw-r--r-- | hamnadmin/hamnadmin/register/feeds.py | 5 | ||||
| -rw-r--r-- | hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py | 4 | ||||
| -rw-r--r-- | hamnadmin/hamnadmin/register/views.py | 18 | ||||
| -rw-r--r-- | hamnadmin/hamnadmin/util/varnish.py | 18 |
4 files changed, 29 insertions, 16 deletions
diff --git a/hamnadmin/hamnadmin/register/feeds.py b/hamnadmin/hamnadmin/register/feeds.py index 5c02972..7bf3f06 100644 --- a/hamnadmin/hamnadmin/register/feeds.py +++ b/hamnadmin/hamnadmin/register/feeds.py @@ -45,3 +45,8 @@ class PostFeed(Feed): return "Unable to clean HTML" else: return item.txt + + def __call__(self, request, *args, **kwargs): + r = super().__call__(request, *args, **kwargs) + r['xkey'] = 'index' + return r diff --git a/hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py b/hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py index 13e8faf..d0bfad4 100644 --- a/hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py +++ b/hamnadmin/hamnadmin/register/management/commands/aggregate_feeds.py @@ -11,7 +11,7 @@ from datetime import datetime from hamnadmin.register.models import Blog, Post, AggregatorLog from hamnadmin.util.aggregate import FeedFetcher, ParserGotRedirect from hamnadmin.mailqueue.util import send_simple_mail -from hamnadmin.util.varnish import purge_root_and_feeds +from hamnadmin.util.varnish import purge_xkey class BreakoutException(Exception): @@ -232,7 +232,7 @@ class Command(BaseCommand): pass if total_entries > 0 and not self.debug: - purge_root_and_feeds() + purge_xkey('index') def _fetch_one_feed(self, fetcher): if self.full: diff --git a/hamnadmin/hamnadmin/register/views.py b/hamnadmin/hamnadmin/register/views.py index db08753..e8c2474 100644 --- a/hamnadmin/hamnadmin/register/views.py +++ b/hamnadmin/hamnadmin/register/views.py @@ -8,7 +8,7 @@ from django.contrib import messages from hamnadmin.register.models import Post, Blog, Team, AggregatorLog, AuditEntry, ModeratorNotes from hamnadmin.mailqueue.util import send_simple_mail -from hamnadmin.util.varnish import purge_url, purge_xkey, purge_root_and_feeds +from hamnadmin.util.varnish import xkey, purge_xkey import datetime @@ -16,6 +16,7 @@ from .forms import BlogEditForm, ModerateRejectForm # Public planet +@xkey('index') def planet_home(request): statdate = datetime.datetime.now() - datetime.timedelta(days=61) posts = Post.objects.select_related('feed', 'feed__team').filter(hidden=False, feed__approved=True).order_by('-dat')[:30] @@ -29,6 +30,7 @@ def planet_home(request): }) +@xkey('feedlist') def planet_feeds(request): return render(request, 'feeds.tmpl', { 'feeds': Blog.objects.filter(approved=True, archived=False), @@ -119,8 +121,7 @@ def edit(request, id=None): messages.warning(request, "Blog has been resubmitted for moderation, and is temporarily disabled.") - purge_root_and_feeds() - purge_url('/feeds.html') + purge_xkey("index feedlist") return HttpResponseRedirect("/register/edit/{0}/".format(obj.id)) @@ -173,8 +174,7 @@ def delete(request, id): ) blog.delete() messages.info(request, "Blog deleted.") - purge_root_and_feeds() - purge_url('/feeds.html') + purge_xkey('index feedlist') return HttpResponseRedirect("/register/") @@ -252,8 +252,7 @@ def __setposthide(request, blogid, postid, status): post.save(update_fields=['hidden']) AuditEntry(request.user.username, 'Set post %s on blog %s visibility to %s' % (postid, blogid, status)).save() messages.info(request, 'Set post "%s" to %s' % (post.title, status and "hidden" or "visible"), extra_tags="top") - purge_root_and_feeds() - purge_xkey('post_{}'.format(post.id)) + purge_xkey('index post_{}'.format(post.id)) return HttpResponseRedirect("/register/edit/{0}/".format(blogid)) @@ -284,7 +283,7 @@ def blogpost_delete(request, blogid, postid): post.delete() AuditEntry(request.user.username, 'Deleted post %s from blog %s' % (postid, blogid)).save() messages.info(request, 'Deleted post "%s". It will be reloaded on the next scheduled crawl.' % title) - purge_root_and_feeds() + purge_xkey('index') return HttpResponseRedirect("/register/edit/{0}/".format(blogid)) @@ -376,7 +375,6 @@ def moderate_approve(request, blogid): messages.info(request, "Blog {0} approved, notification sent to moderators and owner.".format(blog.feedurl)) - purge_root_and_feeds() - purge_url('/feeds.html') + purge_xkey('index feedlist') return HttpResponseRedirect("/register/moderate/") diff --git a/hamnadmin/hamnadmin/util/varnish.py b/hamnadmin/hamnadmin/util/varnish.py index d2f6fe6..4accd00 100644 --- a/hamnadmin/hamnadmin/util/varnish.py +++ b/hamnadmin/hamnadmin/util/varnish.py @@ -3,6 +3,20 @@ from django.conf import settings import requests +def xkey(key): + "Add a specific xkey to the page" + def _xkey(fn): + def __xkey(request, *_args, **_kwargs): + resp = fn(request, *_args, **_kwargs) + if 'xkey' in resp: + resp['xkey'] += ' ' + key + else: + resp['xkey'] = key + return resp + return __xkey + return _xkey + + def purge_url(url): if not settings.VARNISH_URL: print("Not purging {0}".format(url)) @@ -29,7 +43,3 @@ def purge_xkey(xkey): raise Exception("Invalid response code %s" % r.status_code) except Exception as e: raise Exception("Failed to purge xkey '{0}': {1}'".format(xkey, e)) - - -def purge_root_and_feeds(): - purge_url('/(|rss20.*)$') |
