mod_rest/example/app.py
author Kim Alvefur <zash@zash.se>
Sat, 25 Jan 2020 20:11:00 +0100
changeset 3867 45b04f05d624
parent 3865 ede3d1724dd1
child 4250 53ae1df31950
permissions -rw-r--r--
mod_rest: Add some comments to example code
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3857
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
from flask import Flask, Response, request, jsonify
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
app = Flask("echobot")
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
3865
ede3d1724dd1 mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents: 3858
diff changeset
     6
@app.route("/api", methods=["OPTIONS"])
ede3d1724dd1 mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents: 3858
diff changeset
     7
def options():
3867
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
     8
    """
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
     9
    Startup check. Return an appropriate Accept header to confirm the
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    10
    data type to use.
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    11
    """
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    12
3865
ede3d1724dd1 mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents: 3858
diff changeset
    13
    return Response(status=200, headers={"accept": "application/json"})
ede3d1724dd1 mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents: 3858
diff changeset
    14
ede3d1724dd1 mod_rest: Attempt to auto-discover data type wanted by callback
Kim Alvefur <zash@zash.se>
parents: 3858
diff changeset
    15
3857
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
@app.route("/api", methods=["POST"])
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
def hello():
3867
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    18
    """
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    19
    Example RESTful JSON format stanza handler.
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    20
    """
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    21
3857
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
    print(request.data)
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
    if request.is_json:
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
        data = request.get_json()
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
        if "kind" not in data:
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
            return Response(status=400)
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
        if data["kind"] == "message" and "body" in data:
3867
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    30
            # Reply to a message
3857
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
            return jsonify({"body": "Yes this is flask app"})
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
        elif data["kind"] == "iq" and data["type"] == "get":
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
            if "ping" in data:
3867
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    35
                # Respond to ping
3857
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
                return Response(status=204)
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
            elif "disco" in data:
3867
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    39
                # Return supported features
3857
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
                return jsonify(
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
                    {
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
                        "disco": {
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
                            "identities": [
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
                                {
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
                                    "category": "component",
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
                                    "type": "generic",
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
                                    "name": "Flask app",
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
                                }
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
                            ],
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
                            "features": [
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
                                "http://jabber.org/protocol/disco#info",
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    52
                                "http://jabber.org/protocol/disco#items",
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
                                "urn:xmpp:ping",
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    54
                            ],
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    55
                        }
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    56
                    }
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    57
                )
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    59
            elif "items" in data:
3867
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    60
                # Disco items
3857
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    61
                return jsonify(
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    62
                    {"items": [{"jid": "example.org", "name": "Example Dot Org"}]}
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    63
                )
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    64
3858
25c34c9f755c mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents: 3857
diff changeset
    65
            elif "version" in data:
3867
45b04f05d624 mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents: 3865
diff changeset
    66
                # Version info
3858
25c34c9f755c mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents: 3857
diff changeset
    67
                return jsonify({"version": {"name": "app.py", "version": "0"}})
25c34c9f755c mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents: 3857
diff changeset
    68
3857
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    69
    return Response(status=501)
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    71
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    72
if __name__ == "__main__":
fb29d7cd698b mod_rest: Add an examlpe Flask app
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
    app.run()