summaryrefslogtreecommitdiff
path: root/patchtracker/ReqHandler.py
diff options
context:
space:
mode:
Diffstat (limited to 'patchtracker/ReqHandler.py')
-rwxr-xr-xpatchtracker/ReqHandler.py28
1 files changed, 26 insertions, 2 deletions
diff --git a/patchtracker/ReqHandler.py b/patchtracker/ReqHandler.py
index a87fd68..59e0f53 100755
--- a/patchtracker/ReqHandler.py
+++ b/patchtracker/ReqHandler.py
@@ -7,6 +7,7 @@ import sys
import patchtracker.Conf as Conf
from patchtracker.Templates import ErrorTemplate, PatchTemplate, PackageVersTemplate, LetterTocTemplate, FrontPageTemplate, SearchResultsTemplate
from patchtracker.DiffGzHandler import DiffGzHandler, DiffGzException
+from patchtracker.CacheObject import CacheObject, CacheMissException
import patchtracker.DB as DB
from patchtracker.DB import PatchTrackerDB
import pygments
@@ -158,14 +159,19 @@ class FrontPageCmd(Cmd):
class CmdHandler:
def __init__(self, env):
self.headers = []
- uri=Conf.root_url+env['PATH_INFO']
+ uri = Conf.root_url+env['PATH_INFO']
+ self.cacheobj = None
+ #print "Accept:",env['HTTP_ACCEPT']
args = uri[len(Conf.root_url)+1:].split("/")
cmdarg = args[0]
+ cacheable = False
if cmdarg == "patch":
self.cmd = PatchCmd(args[1:])
+ cacheable = True
elif cmdarg == "package":
self.cmd = PackageCmd(args[1:])
+ cacheable = True
elif cmdarg == "index":
self.cmd = IndexCmd(args[1:])
elif cmdarg == "jump":
@@ -178,11 +184,29 @@ class CmdHandler:
else:
self.cmd = ErrorCmd("invalid command/location '%s'"%(cmdarg), "404 Not found")
+ if Conf.caching and cacheable:
+ self.cacheobj = CacheObject(key=uri)
+
self.headers.append( ('Content-type', self.cmd.content_type) )
self.status = self.cmd.status
def output(self):
+ result = None
try:
- return self.cmd.output()
+ if self.cacheobj:
+ result = self.cacheobj.get()
+ else:
+ result = self.cmd.output()
+ except CacheMissException:
+ result = self.cmd.output()
+ self.cacheobj.put(result)
except DiffGzException, e:
return ErrorCmd(str(e), "500 Oh Noez!!1!").output()
+
+ return result
+
+if __name__ == '__main__':
+ fake_env = { 'PATH_INFO': sys.argv[1] }
+ cmdh = CmdHandler(fake_env)
+ print "Status: %s\nHeaders: %s"%(cmdh.status, cmdh.headers)
+ print cmdh.output()