예제 #1
0
    def respond(self, path, headers, post = None):
        if "cookie" in headers:
            cookies = parseCookies(headers["cookie"])
            if "session" in cookies and cookies["session"] in self.sessions:
                sessionId = cookies["session"]
                session = self.sessions[sessionId]
            else:
                sessionId = nonce()
                session = self.sessions[sessionId] = PyWebData()
        else:
            sessionId = nonce()
            session = self.sessions[sessionId] = PyWebData()

        if path[-1] == "":
            path[-1] = "index"
            query = ""
        else:
            if "?" in path[-1]:
                query = path[-1].split("?")[1].split("#")[0]
            else:
                query = ""
            path[-1] = path[-1].split("?")[0].split("#")[0]

        view = os.path.join(*path)
        
        data = PyWebData()
        data.session = session
        data.http = PyWebData()
        data.http.post = post
        data.http.query = parseQuery(query)
        data.http.headers = headers
        data.storage = self.storage

        if data.http.post != None and "content-type" in data.http.headers:
            if data.http.headers["content-type"].split(";")[0].strip().lower() == "application/x-www-form-urlencoded":
                data.http.post = parseQuery(data.http.post)

        try:
            if view in self.views:
                args = self.views[view].render(data)
            elif "404" in self.views:
                args = self.views["404"].render(data)
                args["code"] = 404
                args["message"] = "Not Found"
            else:
                # TODO: Default 404
                args = { "body": "", "code": 404, "message": "Not Found" }

            if not "headers" in args:
                args["headers"] = {}

            args["headers"]["Set-Cookie"] = "session="+sessionId

            return HttpResponse(**args)

        except PyWebViewException, e:

            return HttpResponse("<html><head><title>Internal Server Error</title></head><body><h1>Error message</h1>An error occured while loading this view: " + e.message + "</body></html>", 500, "Internal Server Error")
예제 #2
0
    def serve_forever(self):
        if "__init__" in self.views:
            data = PyWebData()
            data.storage = self.storage
            self.views["__init__"].render(data)
            print "Initialization called"

        print "Now serving on", self.bindAddress[0] + ":" + str(self.bindAddress[1])
        try:
            HttpServer.serve_forever(self)
        except KeyboardInterrupt:
            print "Shutting down"