Hi,

Please review and consider applying the attached patch.

Thanks in advance.

On Mon, Aug 18, 2008 at 2:40 PM, Johan Euphrosine <[EMAIL PROTECTED]> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Please review this new patch instead.
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: http://getfiregpg.org
>
> iD8DBQFIqW2iZmEdV9SHoe4RAo3iAKCGRZdvV53k9hZW51cMeia9IdQPDACfSGyB
> 8sbUO+jJof9Ajya+N8cRgK0=
> =yeBS
> -----END PGP SIGNATURE-----
>
> On Sat, Aug 16, 2008 at 7:08 PM, Johan Euphrosine <[EMAIL PROTECTED]> wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> On Sat, Aug 16, 2008 at 6:54 PM, Johan Euphrosine  wrote:
>>> On Wed, Aug 13, 2008 at 11:33 PM, Loic Dachary  wrote:
>>>> The patch lacks proper error handling. Could you please check the
>>>> PokerSource error handlers and provide the equivalent for /AVATAR and
>>>> /UPLOAD ?
>>>
>>> s/PokerSource/PokerService/ ?
>>>
>>> Do you want me to add an error hander similar to
>>> PokerService.pipesFailed as errback ?
>>>
>>
>> Let me know if the attached patch fix the reported issue
>> - --
>> bou ^
>>
>>
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.6 (GNU/Linux)
>> Comment: http://getfiregpg.org
>>
>> iD8DBQFIpwmrZmEdV9SHoe4RAu7LAJ0e8WCVV3xRhEj+MljKswJPrvmFkACghXUu
>> QkpLxeAdNQUfANSPXBg5gas=
>> =uFu2
>> -----END PGP SIGNATURE-----
>>
>
>
>
> --
> bou ^
>



-- 
bou ^
Index: pokernetwork/pokersite.py
===================================================================
--- pokernetwork/pokersite.py	(revision 4300)
+++ pokernetwork/pokersite.py	(working copy)
@@ -308,14 +308,24 @@
         if self.verbose > 3:
             self.message("render " + request.content.read())
         request.content.seek(0, 0)
-        data = request.args['filename'][0]        
-        self.deferred.addCallback(lambda result: self.deferRender(request, data))
+        self.deferred.addCallback(lambda result: self.deferRender(request))
+        def failed(reason):
+            body = reason.getTraceback()
+            request.setResponseCode(http.INTERNAL_SERVER_ERROR)
+            request.setHeader('content-type',"text/html")
+            request.setHeader('content-length', str(len(body)))
+            request.expireSessionCookie()
+            request.write(body)
+            request.connectionLost(reason)
+            return True
+        self.deferred.addErrback(failed)
         return server.NOT_DONE_YET
 
-    def deferRender(self, request, data):
+    def deferRender(self, request):
         session = request.getSession()
         if session.avatar.isLogged():
             serial = request.getSession().avatar.getSerial()
+            data = request.args['filename'][0]    
             packet = PacketPokerPlayerImage(image = base64.b64encode(data), serial = serial)
             self.service.setPlayerImage(packet)
             result_string = 'image uploaded'
@@ -355,6 +365,16 @@
         request.content.seek(0, 0)
         serial = int(request.path.split('/')[-1])
         self.deferred.addCallback(lambda result: self.deferRender(request, serial))
+        def failed(reason):
+            body = reason.getTraceback()
+            request.setResponseCode(http.INTERNAL_SERVER_ERROR)
+            request.setHeader('content-type',"text/html")
+            request.setHeader('content-length', str(len(body)))
+            request.expireSessionCookie()
+            request.write(body)
+            request.connectionLost(reason)
+            return True
+        self.deferred.addErrback(failed)
         return server.NOT_DONE_YET
 
     def deferRender(self, request, serial):
Index: tests/test-pokersite.py.in
===================================================================
--- tests/test-pokersite.py.in	(revision 4300)
+++ tests/test-pokersite.py.in	(working copy)
@@ -287,10 +287,6 @@
             input = ''
             r.gotLength(len(input))
             r.handleContentChunk(input)
-            import cgi
-            def parse_multipart_mockup(content, dict):
-                  return {'filename':[image_data]}
-            cgi.parse_multipart = parse_multipart_mockup
             r.requestReceived('POST', '/', '')
             self.assertSubstring('image uploaded', r.transport.getvalue())
             self.assertEquals(base64.b64encode(self.image_data),
@@ -314,7 +310,33 @@
             r.requestReceived('POST', '/', '')
             self.assertSubstring('not logged', r.transport.getvalue())
             self.assertEquals(None, self.service.player_image)
+      
+      def test03_error(self):
+            r = pokersite.Request(self.Channel(self.site), True)
+            r.site = r.channel.site
+            
+            r.args = {}
+            session = self.site.makeSession()
+            r.session = session
+            self.assertNotEquals(None, r.getSession().avatar);
+            user_serial = 111
+            r.getSession().avatar.user.serial = user_serial
+            self.assertEquals(True, r.getSession().avatar.isLogged());
 
+            image_data = "image data"
+            r.received_headers['content-type'] = 'multipart/form-data'
+            input = ''
+            r.gotLength(len(input))
+            r.handleContentChunk(input)
+            error_pattern = 'UNLIKELY'
+            def setPlayerImageFailed(player_image):
+                  raise UserWarning, error_pattern
+            self.service.setPlayerImage = setPlayerImageFailed
+            r.requestReceived('POST', '/', '')
+            self.assertSubstring(error_pattern, r.transport.getvalue())
+            self.assertEquals(None, self.service.player_image)
+            session.expire()
+
 class PokerAvatarResourceTestCase(unittest.TestCase):
 
       class Transport:
@@ -351,7 +373,7 @@
             self.assertSubstring('\r\n\r\n%s' % data, r.transport.getvalue())
             self.assertEquals(serial, self.service.player_serial)
 
-      def test02_render_error(self):
+      def test02_not_found(self):
             serial = 100
             self.service.setPlayerImage(PacketPokerPlayerImage(image = '', serial = serial))
             r = pokersite.Request(self.Channel(self.site), True)
@@ -362,6 +384,22 @@
             self.assertSubstring('not found', r.transport.getvalue())
             self.assertEquals(serial, self.service.player_serial)
 
+      def test03_error(self):
+            data = 'image data'
+            serial = 64
+            self.service.setPlayerImage(PacketPokerPlayerImage(image = base64.b64encode(data), serial = serial))
+            r = pokersite.Request(self.Channel(self.site), True)
+            r.site = r.channel.site
+            r.gotLength(0)
+            r.handleContentChunk('')
+            error_pattern = 'UNLIKELY'
+            def getPlayerImageFailed(player_serial):
+                  raise UserWarning, error_pattern
+            self.service.getPlayerImage = getPlayerImageFailed
+            r.requestReceived('GET', '/%i' % serial, '')
+            self.assertSubstring('error_pattern', r.transport.getvalue())
+            self.assertEquals(None, self.service.player_serial)
+
 class FilterTestCase(unittest.TestCase):
 
       def setUp(self):
_______________________________________________
Pokersource-users mailing list
[email protected]
https://mail.gna.org/listinfo/pokersource-users

Reply via email to