def createRequestHandler(request): if request.get("bad"): return ErrorPages.websiteErrorPage(400, request.get("errormsg","")) else: for (prefix, handler) in URLHandlers: if request["raw-uri"][:len(prefix)] == prefix: request["uri-prefix-trigger"] = prefix request["uri-suffix"] = request["raw-uri"][len(prefix):] return handler(request) return ErrorPages.websiteErrorPage(404, "No resource handlers could be found for the requested URL.")
def createRequestHandler(request): if request.get("bad"): return ErrorPages.websiteErrorPage(400, request.get("errormsg", "")) else: for (prefix, handler) in URLHandlers: if request["raw-uri"][:len(prefix)] == prefix: request["uri-prefix-trigger"] = prefix request["uri-suffix"] = request["raw-uri"][len(prefix):] return handler(request) return ErrorPages.websiteErrorPage( 404, "No resource handlers could be found for the requested URL.")
def websiteSessionExample(request): sessionid = request["uri-suffix"] if Sessions.has_key(sessionid): session = Sessions[sessionid] if session["busy"]: return ErrorPages.websiteErrorPage(500, "Session handler busy") else: return session["handler"] else: session = { "busy": True, "handler": websiteSessionExampleComponent(sessionid) } Sessions[sessionid] = session return session["handler"]
def SessionExampleWrapper(request): sessionid = request["uri-suffix"] if Sessions.has_key(sessionid): session = Sessions[sessionid] if session["busy"]: return ErrorPages.websiteErrorPage(500, "Session handler busy") else: return session["handler"] else: session = {"busy": True, "handler": SessionExample(sessionid)} Sessions[sessionid] = session return session["handler"]
def UploadTorrentsWrapper(request): """Returns an UploadTorrents component, manages that components lifetime and access.""" sessionid = request["uri-suffix"] if Sessions.has_key(sessionid): session = Sessions[sessionid] if session["busy"]: return ErrorPages.websiteErrorPage(500, "Session handler busy") else: return session["handler"] else: session = {"busy": True, "handler": UploadTorrents(sessionid)} Sessions[sessionid] = session return session["handler"]
def UploadTorrentsWrapper(request): """Returns an UploadTorrents component, manages that components lifetime and access.""" sessionid = request["uri-suffix"] if Sessions.has_key(sessionid): session = Sessions[sessionid] if session["busy"]: return ErrorPages.websiteErrorPage(500, "Session handler busy") else: return session["handler"] else: session = { "busy": True, "handler": UploadTorrents(sessionid) } Sessions[sessionid] = session return session["handler"]
class websiteMinimal(component): Inboxes = { "inbox" : "UNUSED", "control" : "UNUSED", "_fileread" : "File data", "_filecontrol" : "Signals from file reader" } Outboxes = { "outbox" : "Response dictionaries", "signal" : "UNUSED", "_fileprompt" : "Get the file reader to do some reading", "_filesignal" : "Shutdown the file reader" } def __init__(self, request): self.request = request super(websiteMinimal, self).__init__() def main(self): print "websiteMinimal.handler" filename = sanitizePath(self.request["raw-uri"]) #if os.path.isdir(homedirectory + filename): # if filename[-1:] != "/": filename += "/" # if os.path.isfile(homedirectory + filename + indexfilename): # filename += indexfilename # else: # yield websiteListFilesPage(filename) # return filetype = MimeTypes.workoutMimeType(filename) error = None try: if os.path.exists(homedirectory + filename) and not os.path.isdir(homedirectory + filename): resource = { "type" : filetype, "statuscode" : "200", #"length" : os.path.getsize(homedirectory + filename) } self.send(resource, "outbox") else: print "Error 404, " + homedirectory + filename + " is not a file" error = 404 except OSError, e: error = 404 if error == 404: resource = ErrorPages.getErrorPage(404) resource["incomplete"] = False self.send(resource, "outbox") self.send(producerFinished(self), "signal") return self.filereader = IntelligentFileReader(homedirectory + filename, 50000, 10) self.link((self, "_fileprompt"), (self.filereader, "inbox")) self.link((self, "_filesignal"), (self.filereader, "control")) self.link((self.filereader, "outbox"), (self, "_fileread")) self.link((self.filereader, "signal"), (self, "_filecontrol")) self.addChildren(self.filereader) self.filereader.activate() yield 1 done = False while not done: yield 1 while self.dataReady("_fileread") and len(self.outboxes["outbox"]) < 3: msg = self.recv("_fileread") resource = { "data" : msg } self.send(resource, "outbox") if len(self.outboxes["outbox"]) < 3: self.send("GARBAGE", "_fileprompt") while self.dataReady("_filecontrol") and not self.dataReady("_fileread"): msg = self.recv("_filecontrol") if isinstance(msg, producerFinished): done = True self.pause() self.send(producerFinished(self), "signal")
class Minimal(component): """\ A simple HTTP request handler for HTTPServer which serves files within a given directory, guessing their MIME-type from their file extension. Arguments: -- request - the request dictionary object that spawned this component -- homedirectory - the path to prepend to paths requested -- indexfilename - if a directory is requested, this file is checked for inside it, and sent if found """ Inboxes = { "inbox": "UNUSED", "control": "UNUSED", "debug": "Information useful for debugging", "_fileread": "File data", "_filecontrol": "Signals from file reader" } Outboxes = { "outbox": "Response dictionaries", "signal": "UNUSED", "_fileprompt": "Get the file reader to do some reading", "_filesignal": "Shutdown the file reader" } def debug(self, msg): #self.send(msg, "debug") print msg def __init__(self, request, indexfilename="index.html", homedirectory="htdocs/"): self.request = request self.indexfilename = indexfilename self.homedirectory = homedirectory super(Minimal, self).__init__() def main(self): """Produce the appropriate response then terminate.""" self.debug("Minimal::main.1") filename = sanitizePath(self.request["raw-uri"]) #if os.path.isdir(homedirectory + filename): # if filename[-1:] != "/": filename += "/" # if os.path.isfile(self.homedirectory + filename + self.indexfilename): # filename += indexfilename # else: # yield websiteListFilesPage(filename) # return filetype = MimeTypes.workoutMimeType(filename) error = None try: if os.path.exists(self.homedirectory + filename) and not os.path.isdir( self.homedirectory + filename): resource = { "type": filetype, "statuscode": "200", #"length" : os.path.getsize(homedirectory + filename) } self.send(resource, "outbox") else: print "Error 404, " + filename + " is not a file" error = 404 except OSError, e: error = 404 if error == 404: resource = ErrorPages.getErrorPage(404) resource["incomplete"] = False self.send(resource, "outbox") self.send(producerFinished(self), "signal") return self.filereader = IntelligentFileReader(self.homedirectory + filename, 50000, 10) self.link((self, "_fileprompt"), (self.filereader, "inbox")) self.link((self, "_filesignal"), (self.filereader, "control")) self.link((self.filereader, "outbox"), (self, "_fileread")) self.link((self.filereader, "signal"), (self, "_filecontrol")) self.addChildren(self.filereader) self.filereader.activate() yield 1 self.debug("Minimal::main.2") done = False while not done: yield 1 self.debug("Minimal::main.loop") while self.dataReady("_fileread") and len( self.outboxes["outbox"]) < 3: msg = self.recv("_fileread") self.debug("Minimal::main.sending " + str(len(msg)) + " bytes") resource = {"data": msg} self.send(resource, "outbox") if len(self.outboxes["outbox"]) < 3: self.send( "GARBAGE", "_fileprompt") # we use this to wakeup the filereader while self.dataReady( "_filecontrol") and not self.dataReady("_fileread"): msg = self.recv("_filecontrol") if isinstance(msg, producerFinished): done = True # self.pause() # uncomment me when we have unpause on receipt self.send(producerFinished(self), "signal") self.debug("Minimal::main.complete")