3333import datetime , re
3434
3535from django import forms
36+ from django .conf import settings
37+ from django .core .cache import cache
3638from django .core .exceptions import ObjectDoesNotExist
3739from django .core .urlresolvers import reverse as urlreverse
38- from django .shortcuts import render
3940from django .db .models import Q
4041from django .http import Http404 , HttpResponseBadRequest , HttpResponse , HttpResponseRedirect
42+ from django .shortcuts import render
43+ from django .utils .cache import _generate_cache_key
4144
4245import 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
452465def ad_dashboard_group (doc ):
453466
0 commit comments