Add preview for pathoc requests to web app.

This commit is contained in:
Aldo Cortesi 2012-07-24 23:13:04 +12:00
parent 6c565e778f
commit ab59d6dccf
8 changed files with 90 additions and 21 deletions

View File

@ -73,8 +73,8 @@ def onelog(lid):
return render("onelog.html", section="log", alog=l, lid=lid)
@app.route('/preview')
def preview():
@app.route('/response_preview')
def response_preview():
spec = request.args["spec"]
args = dict(
spec = spec,
@ -87,10 +87,33 @@ def preview():
except rparse.ParseException, v:
args["syntaxerror"] = str(v)
args["marked"] = v.marked()
return render("preview.html", **args)
return render("preview_response.html", **args)
s = cStringIO.StringIO()
r.preview_safe()
r.serve(s, check=app.config["pathod"].check_size)
args["output"] = utils.escape_unprintables(s.getvalue())
return render("preview.html", **args)
return render("preview_response.html", **args)
@app.route('/request_preview')
def request_preview():
spec = request.args["spec"]
args = dict(
spec = spec,
section = "main",
syntaxerror = None,
error = None
)
try:
r = rparse.parse_request(app.config["pathod"].request_settings, spec)
except rparse.ParseException, v:
args["syntaxerror"] = str(v)
args["marked"] = v.marked()
return render("preview_request.html", **args)
s = cStringIO.StringIO()
r.preview_safe()
r.serve(s, check=app.config["pathod"].check_size, host="example.com")
args["output"] = utils.escape_unprintables(s.getvalue())
return render("preview_request.html", **args)

View File

@ -1,14 +1,11 @@
section {
margin-top: 50px;
}
.example {
margin-top: 10px;
margin-bottom: 10px;
}
.terminal {

View File

@ -1,29 +1,33 @@
{% extends "frame.html" %}
{% block body %}
{% include "previewform.html" %}
<div class="hero-unit">
<h1>Tools for testing and torturing HTTP clients, servers and proxies.</h1>
<h1>Testing and torturing HTTP clients and servers.</h1>
</div>
<div class="row">
<div class="span4">
<div class="span6">
<div class="well">
<h1> <a href="/docs/pathod">pathod</a> </h1>
A pathological web daemon.
{% include "response_previewform.html" %}
</div>
</div>
<div class="span4">
<div class="span6">
<div class="well">
<h1> <a href="/docs/pathoc">pathoc</a> </h1>
A perverse HTTP client.
{% include "request_previewform.html" %}
</div>
</div>
<div class="span4">
</div>
<div class="row">
<div class="span12">
<div class="well">
<h1> <a href="/docs/test">libpathod.test</a> </h1>
@ -33,5 +37,4 @@
</div>
</div>
{% endblock %}

View File

@ -0,0 +1,23 @@
{% extends "frame.html" %}
{% block body %}
<h1>Preview</h1>
{% if syntaxerror %}
<h2> Error: {{ syntaxerror }} </h2>
<pre>{{ marked }}</pre>
{% elif error %}
<h2> Error </h2>
<p style="color: #ff0000">{{ error }}</p>
{% else %}
<h2>Spec:</h2>
<pre>{{ spec }}</pre>
<h2>Request:</h2>
<pre>{{ output }}</pre>
{% endif %}
{% include "request_previewform.html" %}
{% endblock %}

View File

@ -19,5 +19,5 @@
<pre>{{ output }}</pre>
{% endif %}
{% include "previewform.html" %}
{% include "response_previewform.html" %}
{% endblock %}

View File

@ -0,0 +1,4 @@
<form class="form-inline" method="GET" action="/request_preview">
<input id="spec" name="spec" class="input-medium search-query" value="{{spec}}">
<input type="submit" class="btn" value="preview">
</form>

View File

@ -1,5 +1,5 @@
<form class="well form-search" method="GET" action="/preview">
<input id="spec" style="width: 30em;" name="spec" class="input-medium search-query" value="{{spec}}">
<form class="form-inline" method="GET" action="/response_preview">
<input id="spec" name="spec" class="input-medium search-query" value="{{spec}}">
<input type="submit" class="btn" value="preview">
<a href="#" id="submitspec" class="btn">go</a>
</form>

View File

@ -21,21 +21,40 @@ class TestApp(tutils.DaemonTests):
assert self.getpath("/log/%s"%id).status_code == 200
assert self.getpath("/log/9999999").status_code == 404
def test_preview(self):
r = self.getpath("/preview", params=dict(spec="200"))
def test_response_preview(self):
r = self.getpath("/response_preview", params=dict(spec="200"))
assert r.status_code == 200
assert 'Response' in r.content
r = self.getpath("/preview", params=dict(spec="foo"))
r = self.getpath("/response_preview", params=dict(spec="foo"))
assert r.status_code == 200
assert 'Error' in r.content
r = self.getpath("/preview", params=dict(spec="200:b@100m"))
r = self.getpath("/response_preview", params=dict(spec="200:b@100m"))
assert r.status_code == 200
assert "too large" in r.content
r = self.getpath("/preview", params=dict(spec="200:b@5k"))
r = self.getpath("/response_preview", params=dict(spec="200:b@5k"))
assert r.status_code == 200
assert 'Response' in r.content
def test_request_preview(self):
r = self.getpath("/request_preview", params=dict(spec="get:/"))
assert r.status_code == 200
assert 'Request' in r.content
r = self.getpath("/request_preview", params=dict(spec="foo"))
assert r.status_code == 200
assert 'Error' in r.content
r = self.getpath("/request_preview", params=dict(spec="get:/:b@100m"))
assert r.status_code == 200
assert "too large" in r.content
r = self.getpath("/request_preview", params=dict(spec="get:/:b@5k"))
assert r.status_code == 200
assert 'Request' in r.content