[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