mirror of https://github.com/dapr/samples.git
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
import logging
|
|
import os
|
|
|
|
from flask import Flask, jsonify, render_template, request
|
|
from flask_socketio import SocketIO
|
|
|
|
APP_PORT = os.getenv("APP_PORT", "3001")
|
|
PUBSUB_NAME = os.getenv("PUBSUB_NAME", "orders")
|
|
TOPIC_NAME = os.getenv("TOPIC_NAME", "notifications")
|
|
|
|
app = Flask(__name__)
|
|
socketio = SocketIO(app)
|
|
|
|
|
|
@socketio.on('connect')
|
|
def socket_connect():
|
|
print('connected', flush=True)
|
|
|
|
|
|
@app.route('/')
|
|
def index():
|
|
return render_template('index.html')
|
|
|
|
|
|
@app.route('/dapr/subscribe', methods=['GET'])
|
|
def subscribe():
|
|
"""Returns the list of topics the app wants to subscribe to.
|
|
Ref: https://docs.dapr.io/reference/api/pubsub_api/#provide-a-route-for-dapr-to-discover-topic-subscriptions"""
|
|
subs = [
|
|
{
|
|
'pubsubname': PUBSUB_NAME,
|
|
'topic': TOPIC_NAME,
|
|
'route': TOPIC_NAME,
|
|
},
|
|
]
|
|
return jsonify(subs)
|
|
|
|
|
|
@app.route('/' + TOPIC_NAME, methods=['POST', 'PUT'])
|
|
def topic_notifications():
|
|
"""Handles notification events from the Dapr pubsub component.
|
|
Ref: https://docs.dapr.io/reference/api/pubsub_api/#provide-routes-for-dapr-to-deliver-topic-events"""
|
|
logging.info(f"Received notification: {request.json}")
|
|
event = request.json
|
|
socketio.emit('message', event)
|
|
return '', 200
|
|
|
|
|
|
@app.route("/healthz", methods=["GET"])
|
|
def hello():
|
|
return f"Hello from {__name__}", 200
|
|
|
|
|
|
def main():
|
|
logging.info("Starting Flask app...")
|
|
socketio.run(app, port=APP_PORT, allow_unsafe_werkzeug=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
logging.basicConfig(
|
|
format='%(asctime)s.%(msecs)03d %(levelname)s: %(message)s',
|
|
datefmt='%Y-%m-%d %H:%M:%S',
|
|
level=logging.INFO)
|
|
main()
|