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 SessionExampleWrapper(request): sessionid = request["uri-suffix"] if (sessionid in Sessions): 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 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 application(environ, start_response): """ This is just a plain old error page serving application. """ error = 404 status = MapStatusCodeToText[str(error)] response_headers = [('Content-type', 'text/html')] start_response(status, response_headers) ErrorPage = ErrorPages.getErrorPage(error)['data'] yield ErrorPage
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 (sessionid in Sessions): 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 application(environ, start_response): """ This is just a plain old error page serving application. """ error = 404 status = MapStatusCodeToText[str(error)] response_headers = [('Content-type', 'text/html')] start_response(status, response_headers) requested_path = environ['SCRIPT_NAME'] + environ['PATH_INFO'] ErrorPage = ErrorPages.getErrorPage(error, '%s not found.' % (requested_path))['data'] yield ErrorPage
def _error(self, status=500, body_data=('', '', '')): """ This is an internal method used to print an error to the browser and log it in the wsgi log. """ if self.Debug: resource = { 'statuscode' : status, 'type' : 'text/html', 'data' : cgitb.html(body_data), } self.send(resource, 'outbox') else: self.send(ErrorPages.getErrorPage(status, 'An internal error has occurred.'), 'outbox') self.log.write(''.join(traceback.format_exception(body_data[0], body_data[1], body_data[2], '\n')))
def main(self): """Produce the appropriate response then terminate.""" filename = sanitizePath(self.request["uri-suffix"]) if not (self.homedirectory.endswith('/') or filename.startswith('/')): filepath = self.homedirectory + '/' + filename # FIXME: Should use os.path.join else: filepath = self.homedirectory + filename # FIXME: Should use os.path.join # print (filepath) # FIXME: Logic here looks a little bust actually, and can probably # FIXME: be reworked further and simplified. filetype = MimeTypes.workoutMimeType(filename) error = None try: if os.path.exists(filepath): if os.path.isdir(filepath): filepath += self.indexfilename # FIXME: Assumes X/index.html always exists resource = { "content-type" : filetype, "statuscode" : 200, } self.send(resource, "outbox") else: print ("Error 404, " + filename + " is not a file") print ("self.homedirectory(%s) , filename(%s)" % (self.homedirectory , filename)) print ("os.path.exists(self.homedirectory + filename)", os.path.exists(self.homedirectory + filename)) print ("not os.path.isdir(self.homedirectory + filename)", (not os.path.isdir(self.homedirectory + filename))) error = 404 except OSError: e = sys.exc_info()[1] 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(filepath, 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") # 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() self.send(producerFinished(self), "signal")
def main(self): """Produce the appropriate response then terminate.""" filename = sanitizePath(self.request["uri-suffix"]) if not (self.homedirectory.endswith('/') or filename.startswith('/')): filepath = self.homedirectory + '/' + filename # FIXME: Should use os.path.join else: filepath = self.homedirectory + filename # FIXME: Should use os.path.join # print (filepath) # FIXME: Logic here looks a little bust actually, and can probably # FIXME: be reworked further and simplified. filetype = MimeTypes.workoutMimeType(filename) error = None try: if os.path.exists(filepath): if os.path.isdir(filepath): filepath += self.indexfilename # FIXME: Assumes X/index.html always exists resource = { "content-type": filetype, "statuscode": 200, } self.send(resource, "outbox") else: print("Error 404, " + filename + " is not a file") print("self.homedirectory(%s) , filename(%s)" % (self.homedirectory, filename)) print("os.path.exists(self.homedirectory + filename)", os.path.exists(self.homedirectory + filename)) print("not os.path.isdir(self.homedirectory + filename)", (not os.path.isdir(self.homedirectory + filename))) error = 404 except OSError: e = sys.exc_info()[1] 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(filepath, 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") # 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() 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", "_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, substituted_path, indexfilename = "index.html", homedirectory = "htdocs/"): self.request = request self.indexfilename = indexfilename self.homedirectory = homedirectory self.substituted_path = substituted_path super(Minimal, self).__init__() def main(self): """Produce the appropriate response then terminate.""" filename = sanitizePath(self.request["raw-uri"], self.substituted_path) filepath = self.homedirectory + filename #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 error = None try: if os.path.exists(filepath): if os.path.isdir(filepath): filepath = filepath.rstrip('/') filepath = filepath + '/' + self.indexfilename print filepath filetype = mimetypes.guess_type(filepath) resource = { "type" : filetype, "statuscode" : "200", #"length" : os.path.getsize(homedirectory + filename) } print resource self.send(resource, "outbox") else: print "Error 404, " + filepath + " is not a file" print "filepath: %s" % (filepath) print "os.path.exists(filepath)", os.path.exists(filepath) print "os.path.isdir(filepath)", (os.path.isdir(filepath)) 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(filepath, 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") # 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() 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", "_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" } # FIXME: If this used inheritable defaults instead, this would actually # FIXME: probably eliminate the need for the factory function above. def __init__(self, request, indexfilename='index.html', homedirectory='htdocs/', **argd): super(Minimal, self).__init__(**argd) self.request = request self.indexfilename = indexfilename self.homedirectory = homedirectory def main(self): """Produce the appropriate response then terminate.""" filename = sanitizePath(self.request["uri-suffix"]) if not (self.homedirectory.endswith('/') or filename.startswith('/')): filepath = self.homedirectory + '/' + filename # FIXME: Should use os.path.join else: filepath = self.homedirectory + filename # FIXME: Should use os.path.join # print filepath # FIXME: Logic here looks a little bust actually, and can probably # FIXME: be reworked further and simplified. filetype = MimeTypes.workoutMimeType(filename) error = None try: if os.path.exists(filepath): if os.path.isdir(filepath): filepath += self.indexfilename # FIXME: Assumes X/index.html always exists resource = { "content-type": filetype, "statuscode": 200, } self.send(resource, "outbox") else: print "Error 404, " + filename + " is not a file" print "self.homedirectory(%s) , filename(%s)" % ( self.homedirectory, filename) print "os.path.exists(self.homedirectory + filename)", os.path.exists( self.homedirectory + filename) print "not os.path.isdir(self.homedirectory + filename)", ( not os.path.isdir(self.homedirectory + filename)) 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(filepath, 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") # 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() self.send(producerFinished(self), "signal")