def publish(serializer, category, request): message = {} redis_publisher = RedisPublisher(facility="pushes", broadcast=True) existing_message = redis_publisher.fetch_message(request, "pushes") if existing_message: message = json.loads(existing_message) message[category] = serializer.data redis_publisher.publish_message(RedisMessage(json.dumps(message)))
def sync(self, request): # Sample code for reading incidents message queue redis_publisher = RedisPublisher(facility='pushes', broadcast=True) message = redis_publisher.fetch_message(request, facility='pushes') # if the message is empty, replace it with a empty json/dict and convert to a string if not message: message = json.dumps({}) return Response(json.loads(message))
def test_publish_user(self): logged_in = self.client.login(username='******', password='******') self.assertTrue(logged_in, 'John is not logged in') websocket_url = self.websocket_base_url + u'?publish-user' header = ['Cookie: sessionid={0}'.format(self.client.cookies['sessionid'].coded_value)] ws = create_connection(websocket_url, header=header) self.assertTrue(ws.connected) ws.send(self.message) ws.close() self.assertFalse(ws.connected) publisher = RedisPublisher() request = self.factory.get('/chat/') request.user = User.objects.get(username='******') result = publisher.fetch_message(request, self.facility, 'user') self.assertEqual(result, self.message) request.user = None result = publisher.fetch_message(request, self.facility, 'user') self.assertEqual(result, None)
def test_publish_broadcast(self): websocket_url = self.websocket_base_url + u'?publish-broadcast' ws = create_connection(websocket_url) self.assertTrue(ws.connected) ws.send(self.message) ws.close() self.assertFalse(ws.connected) publisher = RedisPublisher() request = self.factory.get('/chat/') result = publisher.fetch_message(request, self.facility, 'broadcast') self.assertEqual(result, self.message) # now access Redis store directly self.assertEqual(publisher._connection.get(self.prefix + ':broadcast:' + self.facility), self.message)
def test_publish_session(self): logged_in = self.client.login(username='******', password='******') self.assertTrue(logged_in, 'Mary is not logged in') self.assertIsInstance(self.client.session, (dict, type(self.session)), 'Did not receive a session key') session_key = self.client.session.session_key self.assertGreater(len(session_key), 30, 'Session key is too short') websocket_url = self.websocket_base_url + u'?publish-session' header = ['Cookie: sessionid={0}'.format(session_key)] ws = create_connection(websocket_url, header=header) self.assertTrue(ws.connected) ws.send(self.message) ws.close() self.assertFalse(ws.connected) publisher = RedisPublisher() request = self.factory.get('/chat/') request.session = self.client.session result = publisher.fetch_message(request, self.facility, 'session') self.assertEqual(result, self.message)