aboutsummaryrefslogtreecommitdiffstats
path: root/libpathod/app.py
blob: 79c0fc71143d30bebad460eedc24a3ebd5315292 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import logging, pprint, cStringIO
from flask import Flask, jsonify, render_template, request, abort
import version, rparse, utils

logging.basicConfig(level="DEBUG")
app = Flask(__name__)

def api():
    @app.route('/api/info')
    def api_info():
        return jsonify(
            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, **kwargs):
    kwargs["noapi"] = app.config["pathod"].noapi
    kwargs["nocraft"] = app.config["pathod"].nocraft
    kwargs["craftanchor"] = app.config["pathod"].craftanchor
    return render_template(s, **kwargs)


@app.route('/')
@app.route('/index.html')
def index():
    return render("index.html", section="main")


@app.route('/docs/pathod')
def docs_pathod():
    return render("docs_pathod.html", section="docs")


@app.route('/docs/language')
def docs_language():
    return render("docs_lang.html", section="docs")


@app.route('/docs/pathoc')
def docs_pathoc():
    return render("docs_pathoc.html", section="docs")


@app.route('/docs/test')
def docs_test():
    return render("docs_test.html", section="docs")


@app.route('/log')
def log():
    if app.config["pathod"].noapi:
        abort(404)
    return render("log.html", 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))
    if not item:
        abort(404)
    l = pprint.pformat(item)
    return render("onelog.html", section="log", alog=l, lid=lid)


@app.route('/response_preview')
def response_preview():
    spec = request.args["spec"]
    args = dict(
        spec = spec,
        section = "main",
        syntaxerror = None,
        error = None
    )
    try:
        r = rparse.parse_response(app.config["pathod"].request_settings, spec)
    except rparse.ParseException, v:
        args["syntaxerror"] = str(v)
        args["marked"] = v.marked()
        return render("response_preview.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("response_preview.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("request_preview.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("request_preview.html", **args)