Merge pull request #3216 from ostcar/early_websocket_open
Open websocket connections immediately
This commit is contained in:
commit
11aacc71b6
@ -56,6 +56,9 @@ def ws_add_site(message):
|
|||||||
# Saves the reply channel to the user. Uses 0 for anonymous users.
|
# Saves the reply channel to the user. Uses 0 for anonymous users.
|
||||||
websocket_user_cache.add(message.user.id or 0, message.reply_channel.name)
|
websocket_user_cache.add(message.user.id or 0, message.reply_channel.name)
|
||||||
|
|
||||||
|
# Open the websocket connection.
|
||||||
|
send_or_wait(message.reply_channel.send, {'accept': True})
|
||||||
|
|
||||||
# Collect all elements that shoud be send to the client when the websocket
|
# Collect all elements that shoud be send to the client when the websocket
|
||||||
# connection is established
|
# connection is established
|
||||||
output = []
|
output = []
|
||||||
@ -74,8 +77,6 @@ def ws_add_site(message):
|
|||||||
# Send all data. If there is no data, then only accept the connection
|
# Send all data. If there is no data, then only accept the connection
|
||||||
if output:
|
if output:
|
||||||
send_or_wait(message.reply_channel.send, {'text': json.dumps(output)})
|
send_or_wait(message.reply_channel.send, {'text': json.dumps(output)})
|
||||||
else:
|
|
||||||
send_or_wait(message.reply_channel.send, {'accept': True})
|
|
||||||
|
|
||||||
|
|
||||||
@channel_session_user
|
@channel_session_user
|
||||||
|
@ -481,6 +481,9 @@ class Collection:
|
|||||||
cache.set(self.get_cache_key(), ids)
|
cache.set(self.get_cache_key(), ids)
|
||||||
|
|
||||||
|
|
||||||
|
_models_to_collection_string = {}
|
||||||
|
|
||||||
|
|
||||||
def get_model_from_collection_string(collection_string):
|
def get_model_from_collection_string(collection_string):
|
||||||
"""
|
"""
|
||||||
Returns a model class which belongs to the argument collection_string.
|
Returns a model class which belongs to the argument collection_string.
|
||||||
@ -493,20 +496,18 @@ def get_model_from_collection_string(collection_string):
|
|||||||
for model in app_config.get_models():
|
for model in app_config.get_models():
|
||||||
yield model
|
yield model
|
||||||
|
|
||||||
|
# On the first run, generate the dict. It can not change at runtime.
|
||||||
|
if not _models_to_collection_string:
|
||||||
for model in model_generator():
|
for model in model_generator():
|
||||||
try:
|
try:
|
||||||
model_collection_string = model.get_collection_string()
|
get_collection_string = model.get_collection_string
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# Skip models which do not have the method get_collection_string.
|
# Skip models which do not have the method get_collection_string.
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
if model_collection_string == collection_string:
|
_models_to_collection_string[get_collection_string()] = model
|
||||||
# The model was found.
|
|
||||||
break
|
return _models_to_collection_string[collection_string]
|
||||||
else:
|
|
||||||
# No model was found in all apps.
|
|
||||||
raise ValueError('Invalid message. A valid collection_string is missing.')
|
|
||||||
return model
|
|
||||||
|
|
||||||
|
|
||||||
def get_single_element_cache_key(collection_string, id):
|
def get_single_element_cache_key(collection_string, id):
|
||||||
|
@ -58,7 +58,7 @@ class TestGetModelFromCollectionString(TestCase):
|
|||||||
self.assertEqual(projector_model, Projector)
|
self.assertEqual(projector_model, Projector)
|
||||||
|
|
||||||
def test_unknown_app(self):
|
def test_unknown_app(self):
|
||||||
with self.assertRaises(ValueError):
|
with self.assertRaises(KeyError):
|
||||||
collection.get_model_from_collection_string('invalid/model')
|
collection.get_model_from_collection_string('invalid/model')
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user