Added release 0.8.7 details in ChangeLog file
[flowspy] / poller / views.py
index b990354..0e756e9 100644 (file)
@@ -4,16 +4,18 @@ from gevent.pool import Pool
 import json
 
 import uuid
-import simplejson
 import datetime
 from django.shortcuts import render_to_response
 from django.template.loader import render_to_string
 from django.http import HttpResponse
 from gevent.event import Event
 from django.conf import settings
-from django.views.decorators.csrf import csrf_exempt
+#from django.views.decorators.csrf import csrf_exempt
+from django.http import HttpResponseRedirect
+from django.core.urlresolvers import reverse
 
-from flowspy.utils import beanstalkc
+
+import beanstalkc
 
 import logging
 
@@ -31,12 +33,14 @@ def create_message(body, user):
 
 def json_response(value, **kwargs):
     kwargs.setdefault('content_type', 'text/javascript; charset=UTF-8')
-    return HttpResponse(simplejson.dumps(value), **kwargs)
+    return HttpResponse(json.dumps(value), **kwargs)
 
 class Msgs(object):
-    cache_size = 200
+    cache_size = 500
 
     def __init__(self):
+        logger.info("initializing")
+        self.user = None
         self.user_cache = {}
         self.user_cursor = {}
         self.cache = []
@@ -47,24 +51,27 @@ class Msgs(object):
         if self.user_cache:
             request.session['cursor'] = self.user_cache[-1]['id']
         return render_to_response('poll.html', {'messages': self.user_cache})
-    
-    @csrf_exempt
+
     def message_existing(self, request):
-        
-        try:
-            user = request.user.username
-        except:
-            user = None
-        self.new_message_user_event[user] = Event()
-        try:
-            if self.user_cache[user]:
-                self.user_cursor[user] = self.user_cache[user][-1]['id']
-        except:
-            self.user_cache[user] = []
-            self.user_cursor[user] = ''
-        return json_response({'messages': self.user_cache[user]})
+        if request.is_ajax():
+            try:
+                user = request.user.get_profile().peer.domain_name
+            except:
+                user = None
+                return False
+            try:
+                assert(self.new_message_user_event[user])
+            except:
+                self.new_message_user_event[user] = Event()
+            try:
+                if self.user_cache[user]:
+                    self.user_cursor[user] = self.user_cache[user][-1]['id']
+            except:
+                self.user_cache[user] = []
+                self.user_cursor[user] = ''
+            return json_response({'messages': self.user_cache[user]})
+        return HttpResponseRedirect(reverse('group-routes'))
     
-    @csrf_exempt
     def message_new(self, mesg=None):
         if mesg:
             message = mesg['message']
@@ -80,49 +87,47 @@ class Msgs(object):
             self.user_cursor[user] = self.user_cache[user][-1]['id']
         else:
             self.user_cursor[user] = self.user_cache[user][-2]['id']
-#        self.cache.append(msg)
         if len(self.user_cache[user]) > self.cache_size:
             self.user_cache[user] = self.user_cache[user][-self.cache_size:]
         self.new_message_user_event[user].set()
         self.new_message_user_event[user].clear()
         return json_response(msg)
     
-    @csrf_exempt
     def message_updates(self, request):
-        cursor = {}
-        try:
-            user = request.user.username
-        except:
-            user = None
-
-        cursor[user] = self.user_cursor[user]
-            
-        try:
-            if not isinstance(self.user_cache[user], list):
+        if request.is_ajax():
+            cursor = {}
+            try:
+                user = request.user.get_profile().peer.domain_name
+            except:
+                user = None
+                return False
+            try:
+                cursor[user] = self.user_cursor[user]
+            except:
+                return HttpResponse(content='', mimetype=None, status=400)
+                
+            try:
+                if not isinstance(self.user_cache[user], list):
+                    self.user_cache[user] = []
+            except:
                 self.user_cache[user] = []
-        except:
-            self.user_cache[user] = []
-        if not self.user_cache[user] or cursor[user] == self.user_cache[user][-1]['id']:
-            self.new_message_user_event[user].wait()
-#            self.new_message_event.wait()
-#        assert cursor[user] != self.user_cache[user][-1]['id'], cursor[user]
-        try:
-            for index, m in enumerate(self.user_cache[user]):
-                if m['id'] == cursor[user]:
-                    return json_response({'messages': self.user_cache[user][index + 1:]})
-            return json_response({'messages': self.user_cache[user]})
-        finally:
-            if self.user_cache[user]:
-                self.user_cursor[user] = self.user_cache[user][-1]['id']
-#            else:
-#                request.session.pop('cursor', None)
+            if not self.user_cache[user] or cursor[user] == self.user_cache[user][-1]['id']:
+                self.new_message_user_event[user].wait(settings.POLL_SESSION_UPDATE)
+            try:
+                for index, m in enumerate(self.user_cache[user]):
+                    if m['id'] == cursor[user]:
+                        return json_response({'messages': self.user_cache[user][index + 1:]})
+                return json_response({'messages': self.user_cache[user]})
+            finally:
+                if self.user_cache[user]:
+                    self.user_cursor[user] = self.user_cache[user][-1]['id']
+        return HttpResponseRedirect(reverse('group-routes'))
 
     def monitor_polls(self, polls=None):
         b = beanstalkc.Connection()
         b.watch(settings.POLLS_TUBE)
         while True:
             job = b.reserve()
-            print job.body
             msg = json.loads(job.body)
             job.bury()
             self.message_new(msg)
@@ -135,7 +140,6 @@ class Msgs(object):
             p.spawn(self.monitor_polls)
             
 msgs = Msgs()
-
 main = msgs.main
 
 message_new = msgs.message_new
@@ -145,12 +149,3 @@ message_existing = msgs.message_existing
 poll = msgs.start_polling
 poll()
 
-
-
-
-
-
-
-
-
-