Ejemplo n.º 1
0
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")