1
0
mirror of https://github.com/quay/quay.git synced 2026-01-26 06:21:37 +03:00
Files
quay/endpoints/realtime.py
Kenny Lee Sin Cheong 5f63b3a7bb chore: drop deprecated tables and remove unused code (PROJQUAY-522) (#2089)
* chore: drop deprecated tables and remove unused code

* isort imports

* migration: check for table existence before drop
2023-08-25 12:17:24 -04:00

57 lines
1.5 KiB
Python

import json
import logging
from flask import Blueprint, Response, abort, request
from flask_login import current_user
from app import userevents
from auth.decorators import require_session_login
from data.userevent import CannotReadUserEventsException
logger = logging.getLogger(__name__)
realtime = Blueprint("realtime", __name__)
@realtime.route("/user/test")
@require_session_login
def user_test():
evt = userevents.get_event(current_user.db_user().username)
evt.publish_event_data("test", {"foo": 2})
return "OK"
@realtime.route("/user/subscribe")
@require_session_login
def user_subscribe():
def wrapper(listener):
logger.debug("Beginning streaming of user events")
try:
yield "data: %s\n\n" % json.dumps({})
for event_id, data in listener.event_stream():
message = {"event": event_id, "data": data}
json_string = json.dumps(message)
yield "data: %s\n\n" % json_string
finally:
logger.debug("Closing listener due to exception")
listener.stop()
events = request.args.get("events", "").split(",")
if not events:
abort(404)
try:
listener = userevents.get_listener(current_user.db_user().username, events)
except CannotReadUserEventsException:
abort(504)
def on_close():
logger.debug("Closing listener due to response close")
listener.stop()
r = Response(wrapper(listener), mimetype="text/event-stream")
r.call_on_close(on_close)
return r