Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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'))
Beispiel #4
0
    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'))