Пример #1
0
    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")
Пример #2
0
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 = 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")
Пример #3
0
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 = 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")
Пример #4
0
    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")
Пример #5
0
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")