diff options
Diffstat (limited to 'patchtracker/ReqHandler.py')
-rwxr-xr-x | patchtracker/ReqHandler.py | 28 |
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() |