From 75a75d47cb20fca8a8b2b2818a7602d43b4cea1f Mon Sep 17 00:00:00 2001 From: Miguel Grinberg Date: Sat, 8 Jun 2019 15:09:46 +0100 Subject: [PATCH] Invoke Socket.IO callbacks with app and request context (Fixes #262) --- flask_socketio/__init__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/flask_socketio/__init__.py b/flask_socketio/__init__.py index 5290edfe..f86832f6 100644 --- a/flask_socketio/__init__.py +++ b/flask_socketio/__init__.py @@ -398,6 +398,16 @@ def ping(): if not include_self and not skip_sid: skip_sid = flask.request.sid callback = kwargs.pop('callback', None) + if callback: + # wrap the callback so that it sets app app and request contexts + sid = flask.request.sid + original_callback = callback + + def _callback_wrapper(*args): + return self._handle_event(original_callback, None, namespace, + sid, *args) + + callback = _callback_wrapper self.server.emit(event, *args, namespace=namespace, room=room, skip_sid=skip_sid, callback=callback, **kwargs)