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, is not file - " + 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(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")