[Checkins] SVN: zope3org/trunk/src/zorg/live/ Fixed an error condition where the client sends an empty event

Uwe Oestermeier uwe_oestermeier at iwm-kmrc.de
Sun Apr 9 11:12:30 EDT 2006


Log message for revision 66729:
  Fixed an error condition where the client sends an empty event

Changed:
  U   zope3org/trunk/src/zorg/live/page/client.js
  U   zope3org/trunk/src/zorg/live/page/event.py
  U   zope3org/trunk/src/zorg/live/server.py

-=-
Modified: zope3org/trunk/src/zorg/live/page/client.js
===================================================================
--- zope3org/trunk/src/zorg/live/page/client.js	2006-04-09 14:52:37 UTC (rev 66728)
+++ zope3org/trunk/src/zorg/live/page/client.js	2006-04-09 15:12:30 UTC (rev 66729)
@@ -40,7 +40,7 @@
                 LivePage.Responders.dispatch(name, event);
                 }
                 
-			setTimeout("LivePage.nextEvent()", 35000);
+			setTimeout("LivePage.nextEvent()", 500);
 			return true;
 			}
 	   },

Modified: zope3org/trunk/src/zorg/live/page/event.py
===================================================================
--- zope3org/trunk/src/zorg/live/page/event.py	2006-04-09 14:52:37 UTC (rev 66728)
+++ zope3org/trunk/src/zorg/live/page/event.py	2006-04-09 15:12:30 UTC (rev 66729)
@@ -356,8 +356,8 @@
     """
     
     name = args.get('name', None)
+    factory = zapi.getUtility(IClientEventFactory, name=name)
     del args['name']
-    factory = zapi.getUtility(IClientEventFactory, name=name)
     return factory(**args)    
 
 def request2event() :

Modified: zope3org/trunk/src/zorg/live/server.py
===================================================================
--- zope3org/trunk/src/zorg/live/server.py	2006-04-09 14:52:37 UTC (rev 66728)
+++ zope3org/trunk/src/zorg/live/server.py	2006-04-09 15:12:30 UTC (rev 66729)
@@ -27,6 +27,8 @@
 from twisted.internet import reactor
 from twisted.web2 import stream
 
+from zope.component import ComponentLookupError
+
 from zope.app.wsgi import WSGIPublisherApplication
 from zope.app.twisted.server import ServerType
 from zope.app.twisted.http import Prebuffer
@@ -41,6 +43,7 @@
 from zorg.live.page.event import ProgressEvent
 from zorg.live.page.event import dict2event
 
+badRequest = object()
 
 class ExtractionError(Exception) :
     """ Indicates a failed searach for a URI part. """
@@ -49,6 +52,7 @@
 class Extractor(object) :
     """ helper fo extracting uuids from a URI. """
     
+    
     def __init__(self, handler) :
         self.context = handler
         
@@ -98,7 +102,12 @@
         print "Input", input, args
         for k, v in args.items() :
             args[k] = v[0]
-        return dict2event(args)         
+        try :    
+            return dict2event(args)
+        except ComponentLookupError :
+            return None                     # indicates a bad request
+            
+        
                             
     def parseURI(self, uri) :
         """ Checks whether we have a livepage request. """
@@ -127,6 +136,11 @@
                         client.input(event)
                         ok = DirectResult(("ok",))
                         handler.result = ok
+                    else :
+                        global badRequest
+                        handler.result = badRequest
+                        
+                        
             except ExtractionError :
                 pass
        
@@ -165,7 +179,22 @@
         self.expires = time.time() + self.limit
         reactor.callLater(self.idleInterval, self.onIdle)
 
- 
+    def _returnOutput(self, output) :
+        self.headersSent = True
+        
+        self.response.stream=stream.ProducerStream()
+        self.response.stream.write(output)
+        self.response.stream.finish()
+            
+        self.responseDeferred.callback(self.response)
+        self.responseDeferred = None
+        
+    
+    def returnError(self, error) :
+        """ Writes an error result. """
+        self.startWSGIResponse(error, [])
+        self._returnOutput("")        
+        
     def returnResult(self, output, headers=None) :
         """ Writes the result to the deferred response and closes
             the output stream.
@@ -180,17 +209,8 @@
         print "Output", output
         
         self.startWSGIResponse('200 Ok', headers)
-       
-        self.headersSent = True
+        self._returnOutput(output)
         
-        self.response.stream=stream.ProducerStream()
-        self.response.stream.write(output)
-        self.response.stream.finish()
-            
-        self.responseDeferred.callback(self.response)
-        self.responseDeferred = None
- 
- 
     def onIdle(self) :
         """ Idle handler that is called by the reactor.
         
@@ -206,6 +226,8 @@
             return self.returnResult(error.toJSON())        
             
         r = self.result
+        if r == badRequest :
+            return self.returnError('400 Bad Request')
         if r :
             data = ""
             for x in r.body :



More information about the Checkins mailing list