-
Notifications
You must be signed in to change notification settings - Fork 5
/
app.py
48 lines (40 loc) · 1.22 KB
/
app.py
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
import os
from flask import Flask, redirect, jsonify, request
from branca import Branca
import msgpack
import requests
app = Flask(__name__)
branca = Branca(bytes.fromhex(os.environ["SSE_SECRET"]))
# Private and public SSE urls are different because of docker-compose
private_sse_url = "http://sse-server:8000"
public_sse_url = "http://localhost:8000"
todo_list = []
def _notify_update():
encoded_request = msgpack.packb({
"events": [{
"topic": "todo",
"event": "todo-update",
"data": "",
}]
})
requests.post("%s/submit" % private_sse_url, data = branca.encode(encoded_request))
@app.route('/')
def home_page():
# You can add templates and all that, but for this demo we just need to load some html page
return redirect('/static/todo.html')
@app.route('/get')
def get_todo_list():
return jsonify(todo_list)
@app.route('/add', methods=["POST"])
def add_todo_item():
todo_list.append(request.json["message"])
_notify_update()
return 'OK'
@app.route('/events')
def events():
topics = ["todo"]
token = branca.encode(msgpack.packb({
"topics": topics
}))
url = "%s/events?token=%s" % (public_sse_url, token)
return redirect(url, 307)