diff --git a/libpathod/app.py b/libpathod/app.py index 2a738b584..c0555422f 100644 --- a/libpathod/app.py +++ b/libpathod/app.py @@ -1,6 +1,6 @@ -import logging -from flask import Flask, jsonify, render_template -import version +import logging, pprint, cStringIO +from flask import Flask, jsonify, render_template, request +import version, rparse logging.basicConfig(level="DEBUG") app = Flask(__name__) @@ -29,75 +29,47 @@ def api_clear_log(): @app.route('/') @app.route('/index.html') def index(): - return render_template("index.html", name="index", section="main") + return render_template("index.html", section="main") + + +@app.route('/help') +def help(): + return render_template("help.html", section="help") +@app.route('/log') +def log(): + return render_template("log.html", section="log", log=app.config["pathod"].get_log()) + -""" -class _Page(tornado.web.RequestHandler): - def render(self, name, **kwargs): - tornado.web.RequestHandler.render(self, name + ".html", **kwargs) +@app.route('/log/') +def onelog(lid): + l = pprint.pformat(app.config["pathod"].log_by_id(int(lid))) + return render_template("onelog.html", section="log", alog=l, lid=lid) -class Index(_Page): - name = "index" - section = "main" - def get(self): - self.render(self.name, section=self.section, spec="") - -class Preview(_Page): - name = "preview" - section = "main" - SANITY = 1024*1024 - def get(self): - spec = self.get_argument("spec", None) - args = dict( - spec = spec, - section = self.section, - syntaxerror = None, - error = None - ) - try: - r = rparse.parse(self.application.settings, spec) - except rparse.ParseException, v: - args["syntaxerror"] = str(v) - args["marked"] = v.marked() - return self.render(self.name, **args) - if r.length() > self.SANITY: - error = "Refusing to preview a response of %s bytes. This is for your own good."%r.length() - args["error"] = error - else: - d = utils.DummyRequest() - r.serve(d) - args["output"] = d.getvalue() - self.render(self.name, **args) - - -class Help(_Page): - name = "help" - section = "help" - def get(self): - self.render(self.name, section=self.section) - - -class Log(_Page): - name = "log" - section = "log" - def get(self): - self.render(self.name, section=self.section, log=self.application.log) - - -class OneLog(_Page): - name = "onelog" - section = "log" - def get(self, lid): - l = pprint.pformat(self.application.log_by_id(int(lid))) - self.render(self.name, section=self.section, alog=l, lid=lid) - - -class ClearLog(_Page): - def post(self): - self.application.clear_logs() - self.redirect("/log") -""" +SANITY = 1024*1024 +@app.route('/preview') +def preview(): + spec = request.args["spec"] + args = dict( + spec = spec, + section = "main", + syntaxerror = None, + error = None + ) + try: + r = rparse.parse(app.config["pathod"].request_settings, spec) + except rparse.ParseException, v: + args["syntaxerror"] = str(v) + args["marked"] = v.marked() + return render_template("preview.html", **args) + if r.length() > SANITY: + error = "Refusing to preview a response of %s bytes. This is for your own good."%r.length() + args["error"] = error + else: + s = cStringIO.StringIO() + r.serve(s) + args["output"] = s.getvalue() + return render_template("preview.html", **args) diff --git a/libpathod/pathod.py b/libpathod/pathod.py index edf6e03a6..4f5fba22f 100644 --- a/libpathod/pathod.py +++ b/libpathod/pathod.py @@ -35,6 +35,17 @@ class PathodHandler(tcp.BaseHandler): ret = presp.serve(self.wfile) if ret["disconnect"]: self.close() + + ret["request"] = dict( + path = path, + method = method, + headers = headers.lst, + #remote_address = self.request.connection.address, + #full_url = self.request.full_url(), + #query = self.request.query, + httpversion = httpversion, + #uri = self.request.uri, + ) self.server.add_log(ret) else: cc = wsgi.ClientConn(self.client_address) @@ -60,6 +71,10 @@ class Pathod(tcp.TCPServer): self.log = [] self.logid = 0 + @property + def request_settings(self): + return {} + def handle_connection(self, request, client_address): PathodHandler(request, client_address, self) diff --git a/libpathod/templates/help.html b/libpathod/templates/help.html index 3ab48c954..f5ac67967 100644 --- a/libpathod/templates/help.html +++ b/libpathod/templates/help.html @@ -1,4 +1,4 @@ -{% extends frame.html %} +{% extends "frame.html" %} {% block body %} @@ -251,4 +251,4 @@ ascii bytes -{% end %} +{% endblock %} diff --git a/libpathod/templates/log.html b/libpathod/templates/log.html index e8bf113a8..22747e0ec 100644 --- a/libpathod/templates/log.html +++ b/libpathod/templates/log.html @@ -1,4 +1,4 @@ -{% extends frame.html %} +{% extends "frame.html" %} {% block body %}
@@ -10,17 +10,19 @@ id - url + method + path {% for i in log %} {{ i["id"] }} - {{ i["request"]["full_url"] }} + {{ i["request"]["method"] }} + {{ i["request"]["path"] }} - {% end %} + {% endfor %} -{% end %} +{% endblock %} diff --git a/libpathod/templates/onelog.html b/libpathod/templates/onelog.html index 378bac321..a94f443ab 100644 --- a/libpathod/templates/onelog.html +++ b/libpathod/templates/onelog.html @@ -1,4 +1,4 @@ -{% extends frame.html %} +{% extends "frame.html" %} {% block body %}

Log entry {{ lid }}


@@ -6,5 +6,5 @@ {{ alog }} -{% end %} +{% endblock %} diff --git a/libpathod/templates/preview.html b/libpathod/templates/preview.html index 63960ebe5..4b5182d71 100644 --- a/libpathod/templates/preview.html +++ b/libpathod/templates/preview.html @@ -1,4 +1,4 @@ -{% extends frame.html %} +{% extends "frame.html" %} {% block body %}

Preview

@@ -10,7 +10,6 @@

Error

{{ error }}

{% else %} -

Spec:

{{ spec }}
@@ -19,6 +18,6 @@
{{ output }}
-{% end %} -{% include previewform.html %} -{% end %} +{% endif %} +{% include "previewform.html" %} +{% endblock %}