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")
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"