aboutsummaryrefslogtreecommitdiffstats
path: root/libpathod/app.py
blob: 6478964cdf9f6c9e8dfa3a82de938ac5fec3cda3 (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
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
    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("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_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)