Skip to content

Commit 5ab5b8a

Browse files
committed
Added caching to the smart document lookup view.
- Legacy-Id: 10807
1 parent 36d30ed commit 5ab5b8a

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

ietf/doc/views_search.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,14 @@
3333
import datetime, re
3434

3535
from django import forms
36+
from django.conf import settings
37+
from django.core.cache import cache
3638
from django.core.exceptions import ObjectDoesNotExist
3739
from django.core.urlresolvers import reverse as urlreverse
38-
from django.shortcuts import render
3940
from django.db.models import Q
4041
from django.http import Http404, HttpResponseBadRequest, HttpResponse, HttpResponseRedirect
42+
from django.shortcuts import render
43+
from django.utils.cache import _generate_cache_key
4144

4245
import debug # pyflakes:ignore
4346

@@ -408,16 +411,26 @@ def find_unique(n):
408411

409412
return None
410413

414+
def cached_redirect(key, url):
415+
cache.set(key, url, settings.CACHE_MIDDLEWARE_SECONDS)
416+
return HttpResponseRedirect(url)
417+
411418
n = name
412419

420+
cache_key = _generate_cache_key(request, 'GET', [], settings.CACHE_MIDDLEWARE_KEY_PREFIX)
421+
if cache_key:
422+
url = cache.get(cache_key, None)
423+
if url:
424+
return HttpResponseRedirect(url)
425+
413426
# chop away extension
414427
extension_split = re.search("^(.+)\.(txt|ps|pdf)$", n)
415428
if extension_split:
416429
n = extension_split.group(1)
417430

418431
redirect_to = find_unique(name)
419432
if redirect_to:
420-
return HttpResponseRedirect(urlreverse("doc_view", kwargs={ "name": redirect_to }))
433+
return cached_redirect(cache_key, urlreverse("doc_view", kwargs={ "name": redirect_to }))
421434
else:
422435
# check for embedded rev - this may be ambigious, so don't
423436
# chop it off if we don't find a match
@@ -428,9 +441,9 @@ def find_unique(n):
428441
rev = rev_split.group(2)
429442
# check if we can redirect directly to the rev
430443
if DocHistory.objects.filter(doc__docalias__name=redirect_to, rev=rev).exists():
431-
return HttpResponseRedirect(urlreverse("doc_view", kwargs={ "name": redirect_to, "rev": rev }))
444+
return cached_redirect(cache_key, urlreverse("doc_view", kwargs={ "name": redirect_to, "rev": rev }))
432445
else:
433-
return HttpResponseRedirect(urlreverse("doc_view", kwargs={ "name": redirect_to }))
446+
return cached_redirect(cache_key, urlreverse("doc_view", kwargs={ "name": redirect_to }))
434447

435448
# build appropriate flags based on string prefix
436449
doctypenames = DocTypeName.objects.filter(used=True)
@@ -447,7 +460,7 @@ def find_unique(n):
447460
else:
448461
search_args += "&rfcs=on&activedrafts=on&olddrafts=on"
449462

450-
return HttpResponseRedirect(urlreverse("doc_search") + search_args)
463+
return cached_redirect(cache_key, urlreverse("doc_search") + search_args)
451464

452465
def ad_dashboard_group(doc):
453466

0 commit comments

Comments
 (0)