author | Matthew Wild <mwild1@gmail.com> |
Sun, 03 Mar 2024 16:10:14 +0000 | |
changeset 5860 | 6fe4dab27187 |
parent 4252 | f3fbfde9683d |
permissions | -rw-r--r-- |
3857 | 1 |
from flask import Flask, Response, request, jsonify |
2 |
||
3 |
app = Flask("echobot") |
|
4 |
||
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 | 16 |
@app.route("/api", methods=["POST"]) |
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 | 22 |
print(request.data) |
23 |
if request.is_json: |
|
24 |
data = request.get_json() |
|
25 |
||
26 |
if "kind" not in data: |
|
27 |
return Response(status=400) |
|
28 |
||
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 | 31 |
return jsonify({"body": "Yes this is flask app"}) |
32 |
||
33 |
elif data["kind"] == "iq" and data["type"] == "get": |
|
4252
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4250
diff
changeset
|
34 |
if "disco" in data: |
3867
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3865
diff
changeset
|
35 |
# Return supported features |
3857 | 36 |
return jsonify( |
37 |
{ |
|
38 |
"disco": { |
|
39 |
"identities": [ |
|
40 |
{ |
|
41 |
"category": "component", |
|
42 |
"type": "generic", |
|
43 |
"name": "Flask app", |
|
44 |
} |
|
45 |
], |
|
46 |
"features": [ |
|
47 |
"http://jabber.org/protocol/disco#info", |
|
48 |
"http://jabber.org/protocol/disco#items", |
|
4250
53ae1df31950
mod_rest/example: Advertise version query support
Kim Alvefur <zash@zash.se>
parents:
3867
diff
changeset
|
49 |
"jabber:iq:version", |
3857 | 50 |
"urn:xmpp:ping", |
51 |
], |
|
52 |
} |
|
53 |
} |
|
54 |
) |
|
55 |
||
56 |
elif "items" in data: |
|
3867
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3865
diff
changeset
|
57 |
# Disco items |
3857 | 58 |
return jsonify( |
59 |
{"items": [{"jid": "example.org", "name": "Example Dot Org"}]} |
|
60 |
) |
|
61 |
||
3858
25c34c9f755c
mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
62 |
elif "version" in data: |
3867
45b04f05d624
mod_rest: Add some comments to example code
Kim Alvefur <zash@zash.se>
parents:
3865
diff
changeset
|
63 |
# Version info |
3858
25c34c9f755c
mod_rest: Add mapping of XEP-0092: Software Version
Kim Alvefur <zash@zash.se>
parents:
3857
diff
changeset
|
64 |
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
|
65 |
|
4252
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4250
diff
changeset
|
66 |
elif "ping" in data: |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4250
diff
changeset
|
67 |
# Respond to ping |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4250
diff
changeset
|
68 |
return Response(status=204) |
f3fbfde9683d
mod_rest/example: Reorder things to match the disco#info feature order
Kim Alvefur <zash@zash.se>
parents:
4250
diff
changeset
|
69 |
|
3857 | 70 |
return Response(status=501) |
71 |
||
72 |
||
73 |
if __name__ == "__main__": |
|
74 |
app.run() |