diff options
Diffstat (limited to 'libpathod')
-rw-r--r-- | libpathod/app.py | 21 | ||||
-rw-r--r-- | libpathod/cmdline.py | 4 | ||||
-rw-r--r-- | libpathod/language.py | 9 | ||||
-rw-r--r-- | libpathod/pathoc.py | 15 |
4 files changed, 23 insertions, 26 deletions
diff --git a/libpathod/app.py b/libpathod/app.py index 1a54f712..1910e80e 100644 --- a/libpathod/app.py +++ b/libpathod/app.py @@ -4,6 +4,8 @@ import version, language, utils from netlib import http_uastrings logging.basicConfig(level="DEBUG") + + def make_app(noapi): app = Flask(__name__) @@ -14,20 +16,17 @@ def make_app(noapi): version = version.IVERSION ) - @app.route('/api/log') def api_log(): return jsonify( log = app.config["pathod"].get_log() ) - @app.route('/api/clear_log') def api_clear_log(): app.config["pathod"].clear_log() return "OK" - def render(s, cacheable, **kwargs): kwargs["noapi"] = app.config["pathod"].noapi kwargs["nocraft"] = app.config["pathod"].nocraft @@ -37,30 +36,25 @@ def make_app(noapi): resp.headers["Cache-control"] = "public, max-age=4320" return resp - @app.route('/') @app.route('/index.html') def index(): return render("index.html", True, section="main") - @app.route('/download') @app.route('/download.html') def download(): return render("download.html", True, section="download", version=version.VERSION) - @app.route('/about') @app.route('/about.html') def about(): return render("about.html", True, section="about") - @app.route('/docs/pathod') def docs_pathod(): return render("docs_pathod.html", True, section="docs", subsection="pathod") - @app.route('/docs/language') def docs_language(): return render( @@ -69,29 +63,24 @@ def make_app(noapi): subsection="lang" ) - @app.route('/docs/pathoc') def docs_pathoc(): return render("docs_pathoc.html", True, section="docs", subsection="pathoc") - @app.route('/docs/libpathod') def docs_libpathod(): return render("docs_libpathod.html", True, section="docs", subsection="libpathod") - @app.route('/docs/test') def docs_test(): return render("docs_test.html", True, section="docs", subsection="test") - @app.route('/log') def log(): if app.config["pathod"].noapi: abort(404) return render("log.html", False, section="log", log=app.config["pathod"].get_log()) - @app.route('/log/<int:lid>') def onelog(lid): item = app.config["pathod"].log_by_id(int(lid)) @@ -100,7 +89,6 @@ def make_app(noapi): l = pprint.pformat(item) return render("onelog.html", False, section="log", alog=l, lid=lid) - def _preview(is_request): if is_request: template = "request_preview.html" @@ -121,7 +109,7 @@ def make_app(noapi): try: if is_request: - r = language.parse_request(spec) + r = language.parse_requests(spec)[0] else: r = language.parse_response(spec) except language.ParseException, v: @@ -144,14 +132,11 @@ def make_app(noapi): args["output"] = utils.escape_unprintables(s.getvalue()) return render(template, False, **args) - @app.route('/response_preview') def response_preview(): return _preview(False) - @app.route('/request_preview') def request_preview(): return _preview(True) return app - diff --git a/libpathod/cmdline.py b/libpathod/cmdline.py index 1a000a93..affc4015 100644 --- a/libpathod/cmdline.py +++ b/libpathod/cmdline.py @@ -155,14 +155,12 @@ def go_pathoc(): data = open(r).read() r = data try: - req = language.parse_request(r) + reqs.extend(language.parse_requests(r)) except language.ParseException, v: print >> sys.stderr, "Error parsing request spec: %s"%v.msg print >> sys.stderr, v.marked() sys.exit(1) - reqs.append(req) args.request = reqs - pathoc.main(args) diff --git a/libpathod/language.py b/libpathod/language.py index b4b59167..f40499f6 100644 --- a/libpathod/language.py +++ b/libpathod/language.py @@ -1030,7 +1030,7 @@ def parse_response(s): raise ParseException(v.msg, v.line, v.col) -def parse_request(s): +def parse_requests(s): """ May raise ParseException """ @@ -1039,6 +1039,11 @@ def parse_request(s): except UnicodeError: raise ParseException("Spec must be valid ASCII.", 0, 0) try: - return Request(Request.expr().parseString(s, parseAll=True)) + parts = pp.OneOrMore( + pp.Group( + Request.expr() + ) + ).parseString(s, parseAll=True) + return [Request(i) for i in parts] except pp.ParseException, v: raise ParseException(v.msg, v.line, v.col) diff --git a/libpathod/pathoc.py b/libpathod/pathoc.py index ae1e98cf..b9b202eb 100644 --- a/libpathod/pathoc.py +++ b/libpathod/pathoc.py @@ -18,8 +18,17 @@ class SSLInfo: class Response: - def __init__(self, httpversion, status_code, msg, headers, content, sslinfo): - self.httpversion, self.status_code, self.msg = httpversion, status_code, msg + def __init__( + self, + httpversion, + status_code, + msg, + headers, + content, + sslinfo + ): + self.httpversion, self.status_code = httpversion, status_code + self.msg = msg self.headers, self.content = headers, content self.sslinfo = sslinfo @@ -91,7 +100,7 @@ class Pathoc(tcp.TCPClient): May raise language.ParseException, netlib.http.HttpError or language.FileAccessDenied. """ - r = language.parse_request(spec) + r = language.parse_requests(spec)[0] language.serve(r, self.wfile, self.settings, self.address.host) self.wfile.flush() ret = list(http.read_response(self.rfile, r.method.string(), None)) |