Add easy way to do xkey based purging of a template

Since we can purge based on the md5 hash of a template name, expose this
in the purge dialog so one doesn't have to manually calculate the hash
to use it.
This commit is contained in:
Magnus Hagander
2020-09-16 19:48:51 +02:00
parent 9eb01b3355
commit 0ff0789831
2 changed files with 16 additions and 2 deletions

View File

@ -16,6 +16,7 @@ from datetime import date, datetime, timedelta
import os
import re
import urllib.parse
import hashlib
from pgweb.util.decorators import cache, nocache
from pgweb.util.contexts import render_pgweb, get_nav_menu, PGWebContextProcessor
@ -471,19 +472,28 @@ def admin_purge(request):
if request.method == 'POST':
url = request.POST['url']
expr = request.POST['expr']
template = request.POST['template']
xkey = request.POST['xkey']
l = len([_f for _f in [url, expr, xkey] if _f])
l = len([_f for _f in [url, expr, template, xkey] if _f])
if l == 0:
# Nothing specified
return HttpResponseRedirect('.')
elif l > 1:
messages.error(request, "Can only specify one of url, expression and xkey!")
messages.error(request, "Can only specify one of url, expression, template and xkey!")
return HttpResponseRedirect('.')
if url:
varnish_purge(url)
elif expr:
varnish_purge_expr(expr)
elif template:
path = os.path.abspath(os.path.join(settings.PROJECT_ROOT, '../templates', template))
if not os.path.isfile(path):
messages.error(request, "Template {} does not exist!".format(template))
return HttpResponseRedirect('.')
# Calculate the xkey
xkey = "pgwt_{}".format(hashlib.md5(template.encode('ascii')).hexdigest())
varnish_purge_xkey(xkey)
else:
varnish_purge_xkey(xkey)

View File

@ -21,6 +21,10 @@
<td>Full expression:</td>
<td><input type="text" name="expr"></td>
</tr>
<tr>
<td>Template:</td>
<td><input type="text" name="template"></td>
</tr>
<tr>
<td>XKey:</td>
<td><input type="text" name="xkey"></td>