Exemplo n.º 1
0
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.")
Exemplo n.º 2
0
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.")
Exemplo n.º 3
0
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"]
Exemplo n.º 4
0
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"]
Exemplo n.º 5
0
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"]
Exemplo n.º 6
0
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"]
Exemplo n.º 7
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, " + 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")
Exemplo n.º 8
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",
        "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")