diff -Nru flask-socketio-2.8.6/debian/changelog flask-socketio-2.9.0/debian/changelog --- flask-socketio-2.8.6/debian/changelog 2017-04-10 18:17:57.000000000 +0000 +++ flask-socketio-2.9.0/debian/changelog 2017-06-27 18:43:12.000000000 +0000 @@ -1,3 +1,10 @@ +flask-socketio (2.9.0-1) unstable; urgency=medium + + * New upstream release. + * debian/control: bumped Standards-Version to 4.0.0. + + -- Paulo Henrique de Lima Santana (phls) Tue, 27 Jun 2017 15:43:12 -0300 + flask-socketio (2.8.6-1) unstable; urgency=medium * Initial release (Closes: #859060) diff -Nru flask-socketio-2.8.6/debian/control flask-socketio-2.9.0/debian/control --- flask-socketio-2.8.6/debian/control 2017-04-10 18:17:57.000000000 +0000 +++ flask-socketio-2.9.0/debian/control 2017-06-27 18:43:12.000000000 +0000 @@ -11,7 +11,7 @@ python3-flask, python3-setuptools X-Python3-Version: >= 3.5 -Standards-Version: 3.9.8 +Standards-Version: 4.0.0 Homepage: https://pypi.python.org/pypi/Flask-SocketIO Package: python3-flask-socketio diff -Nru flask-socketio-2.8.6/flask_socketio/__init__.py flask-socketio-2.9.0/flask_socketio/__init__.py --- flask-socketio-2.8.6/flask_socketio/__init__.py 2017-03-21 14:49:24.000000000 +0000 +++ flask-socketio-2.9.0/flask_socketio/__init__.py 2017-06-26 01:54:14.000000000 +0000 @@ -15,14 +15,14 @@ import socketio import flask -from flask import json as flask_json +from flask import _request_ctx_stack, json as flask_json from werkzeug.debug import DebuggedApplication from werkzeug.serving import run_with_reloader from .namespace import Namespace from .test_client import SocketIOTestClient -__version__ = '2.8.6' +__version__ = '2.9.0' class _SocketIOMiddleware(socketio.Middleware): @@ -49,6 +49,14 @@ isn't known at the time this class is instantiated, then call ``socketio.init_app(app)`` once the application instance is available. + :param manage_session: If set to ``True``, this extension manages the user + session for Socket.IO events. If set to ``False``, + Flask's own session management is used. When using + Flask's cookie based sessions it is recommended that + you leave this set to the default of ``True``. When + using server-side sessions, a ``False`` setting + enables sharing the user session between HTTP routes + and Socket.IO events. :param message_queue: A connection URL for a message queue service the server can use for multi-process communication. A message queue is not required when using a single @@ -128,6 +136,7 @@ self.namespace_handlers = [] self.exception_handlers = {} self.default_exception_handler = None + self.manage_session = True # We can call init_app when: # - we were given the Flask app instance (standard initialization) # - we were not given the app, but we were given a message_queue @@ -145,10 +154,12 @@ app.extensions = {} # pragma: no cover app.extensions['socketio'] = self self.server_options.update(kwargs) + self.manage_session = self.server_options.pop('manage_session', + self.manage_session) if 'client_manager' not in self.server_options: - url = kwargs.pop('message_queue', None) - channel = kwargs.pop('channel', 'flask-socketio') + url = self.server_options.pop('message_queue', None) + channel = self.server_options.pop('channel', 'flask-socketio') write_only = app is None if url: if url.startswith('redis://'): @@ -180,7 +191,8 @@ self.server_options['json'] = FlaskSafeJSON - resource = kwargs.pop('path', kwargs.pop('resource', 'socket.io')) + resource = self.server_options.pop('path', None) or \ + self.server_options.pop('resource', None) or 'socket.io' if resource.startswith('/'): resource = resource[1:] self.server = socketio.Server(**self.server_options) @@ -471,7 +483,11 @@ def run_server(): import eventlet import eventlet.wsgi - eventlet_socket = eventlet.listen((host, port)) + import eventlet.green + addresses = eventlet.green.socket.getaddrinfo(host, port) + if not addresses: + raise RuntimeError('Could not resolve host to a valid address') + eventlet_socket = eventlet.listen(addresses[0][4], addresses[0][0]) # If provided an SSL argument, use an SSL socket ssl_args = ['keyfile', 'certfile', 'server_side', 'cert_reqs', @@ -577,10 +593,21 @@ return '', 400 app = self.server.environ[sid]['flask.app'] with app.request_context(self.server.environ[sid]): - if 'saved_session' in self.server.environ[sid]: - self._copy_session( - self.server.environ[sid]['saved_session'], - flask.session) + if self.manage_session: + # manage a separate session for this client's Socket.IO events + # created as a copy of the regular user session + if 'saved_session' not in self.server.environ[sid]: + self.server.environ[sid]['saved_session'] = \ + dict(flask.session) + session_obj = self.server.environ[sid]['saved_session'] + else: + # let Flask handle the user session + # for cookie based sessions, this effectively freezes the + # session to its state at connection time + # for server-side sessions, this allows HTTP and Socket.IO to + # share the session, with both having read/write access to it + session_obj = flask.session._get_current_object() + _request_ctx_stack.top.session = session_obj flask.request.sid = sid flask.request.namespace = namespace flask.request.event = {'message': message, 'args': args} @@ -596,17 +623,13 @@ raise type, value, traceback = sys.exc_info() return err_handler(value) - if flask.session.modified and sid in self.server.environ: - self.server.environ[sid]['saved_session'] = {} - self._copy_session( - flask.session, - self.server.environ[sid]['saved_session']) + if not self.manage_session: + # when Flask is managing the user session, it needs to save it + if not hasattr(session_obj, 'modified') or session_obj.modified: + resp = app.response_class() + app.session_interface.save_session(app, session_obj, resp) return ret - def _copy_session(self, src, dest): - for k in src: - dest[k] = src[k] - def emit(event, *args, **kwargs): """Emit a SocketIO event. @@ -707,6 +730,8 @@ :param room: The name of the room to join. :param sid: The session id of the client. If not provided, the client is obtained from the request context. + :param namespace: The namespace for the room. If not provided, the + namespace is obtained from the request context. """ socketio = flask.current_app.extensions['socketio'] sid = sid or flask.request.sid @@ -730,6 +755,8 @@ :param room: The name of the room to leave. :param sid: The session id of the client. If not provided, the client is obtained from the request context. + :param namespace: The namespace for the room. If not provided, the + namespace is obtained from the request context. """ socketio = flask.current_app.extensions['socketio'] sid = sid or flask.request.sid @@ -744,6 +771,8 @@ the room from the server. :param room: The name of the room to close. + :param namespace: The namespace for the room. If not provided, the + namespace is obtained from the request context. """ socketio = flask.current_app.extensions['socketio'] namespace = namespace or flask.request.namespace @@ -758,6 +787,8 @@ :param sid: The session id of the client. If not provided, the client is obtained from the request context. + :param namespace: The namespace for the room. If not provided, the + namespace is obtained from the request context. """ socketio = flask.current_app.extensions['socketio'] sid = sid or flask.request.sid diff -Nru flask-socketio-2.8.6/Flask_SocketIO.egg-info/PKG-INFO flask-socketio-2.9.0/Flask_SocketIO.egg-info/PKG-INFO --- flask-socketio-2.8.6/Flask_SocketIO.egg-info/PKG-INFO 2017-03-21 14:50:41.000000000 +0000 +++ flask-socketio-2.9.0/Flask_SocketIO.egg-info/PKG-INFO 2017-06-26 01:55:35.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: Flask-SocketIO -Version: 2.8.6 +Version: 2.9.0 Summary: Socket.IO integration for Flask applications Home-page: http://github.com/miguelgrinberg/Flask-SocketIO/ Author: Miguel Grinberg diff -Nru flask-socketio-2.8.6/PKG-INFO flask-socketio-2.9.0/PKG-INFO --- flask-socketio-2.8.6/PKG-INFO 2017-03-21 14:50:41.000000000 +0000 +++ flask-socketio-2.9.0/PKG-INFO 2017-06-26 01:55:35.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: Flask-SocketIO -Version: 2.8.6 +Version: 2.9.0 Summary: Socket.IO integration for Flask applications Home-page: http://github.com/miguelgrinberg/Flask-SocketIO/ Author: Miguel Grinberg