def do_GET(self): data = {} formats = {"json": "application/json", "text": "text/plain"} request = urlparse.urlparse(self.path) try: (path, fmt) = request.path.split(".") if fmt not in formats: fmt = "text" except ValueError: path = request.path if self.headers.get("accept", False) == "application/json": fmt = "json" self.error_content_type = "application/json" else: fmt = "text" if self.headers.get("x-porkchop-refresh", False): force_refresh = True else: force_refresh = False module = path.split("/")[1] try: if module: plugin = self.server.plugins[module] plugin.force_refresh = force_refresh self.log_message("Calling plugin: %s with force=%s" % (module, force_refresh)) data.update({module: plugin.data}) else: for plugin_name, plugin in self.server.plugins.items(): try: plugin.force_refresh = force_refresh self.log_message("Calling plugin: %s with force=%s" % (plugin_name, force_refresh)) plugin_data = plugin.data if plugin_data: data.update({plugin_name: plugin_data}) except: self.log_error("Error loading plugin: name=%s exception=%s", plugin_name, sys.exc_info()) if len(data): self.send_response(200) self.send_header("Content-Type", formats[fmt]) self.end_headers() self.wfile.write(self.format_output(fmt, data) + "\n") else: # FIXME:dc: this is not actually a failure to load plugings, just no new # data was returned raise Exception("Unable to load any plugins") except: self.log_error("Error: %s", sys.exc_info()) if fmt == "json": msg, explain = self.responses[404] self.error_message_format = json.dumps({"code": 404, "message": _quote_html(msg), "explain": explain}) self.send_error(404) return
def make_error_response(self, status, desc=None, extra_headers={}): assert status >= 400, ("make_error_response, invalid error status code: %r", status) default_responses = self.responses # BaseHTTPRequestHandler if default_responses.has_key(status): phrase, explain = default_responses[status] else: phrase, explain = '???', '???' if not desc: desc = explain content = self.error_message_format % { # BaseHTTPRequestHandler 'code': status, 'message': _quote_html(phrase), 'explain': _quote_html(desc) # 'explain':desc } headers = { 'Connection': 'close', 'Content-Type': self.error_content_type # BaseHTTPRequestHandler } headers.update(extra_headers) return content, status, headers
def send_error(self, code, message=None): self.close_connection = True short, long = HttpHandler.responses.get(code, ('???', message)) if message is None: message = long content = (HttpHandler.MESSAGE % {'code': code, 'message': _quote_html(message), 'short': short}) if self.request_version != "HTTP/0.9": self.sock.write('%s %s %s\r\n' % (self.request_version, code, short)) self.sock.write('Content-Type:text/html; charset=UTF-8\r\n') self.sock.write('Connection: close\r\n\r\n') self.sock.write(content.encode('utf-8'))
def send_error(self, code, message=None): self.close_connection = True short, long = HttpHandler.responses.get(code, ('???', message)) if message is None: message = long content = (HttpHandler.MESSAGE % { 'code': code, 'message': _quote_html(message), 'short': short }) if self.request_version != "HTTP/0.9": self.sock.write('%s %s %s\r\n' % (self.request_version, code, short)) self.sock.write('Content-Type:text/html; charset=UTF-8\r\n') self.sock.write('Connection: close\r\n\r\n') self.sock.write(content.encode('utf-8'))